java Atomic用法

Atomic是什么?

Atomic包下的类基本上都是借助Unsafe类,通过CAS操作来封装实现的。Unsafe这个类简单说下,这个类不属于Java标准,或者说这个类是Java预留的一个后门类。总之Atomic可以让我们在多线程环境下,通过一种无锁的原子操作来实现线程安全。

一、AtomicBoolean
高效并发处理 “只初始化一次” 的功能要求、或者多线程原子性操作(需要首先进入的线程原子性处理完再重置回fasle,注意其他线程同时执行的就会被放弃),
compareAndSet(false, true)提供了原子性操作,比较和赋值操作组成了一个原子操作, 中间不会提供可乘之机
1⃣️

private static AtomicBoolean initialized = new AtomicBoolean(false);
public void init(){
   if( initialized.compareAndSet(false, true) )   {
       // 这里放置初始化代码....
   }
}

2⃣️

private static class Worker implements Runnable {  
  
  private static AtomicBoolean exists = new AtomicBoolean(false);  
  
  private String name;  
  
  public BarWorker(String name) {  
   this.name = name;  
  }  
  
  public void run() {  
   if (exists.compareAndSet(false, true)) {  
    System.out.println(name + " enter");  
    try {  
     System.out.println(name + " working");  
     TimeUnit.SECONDS.sleep(2);  
    } catch (InterruptedException e) {  
     // do nothing  
    }  
    System.out.println(name + " leave");  
    exists.set(false);  
   }else{  
    System.out.println(name + " give up");  
   }  
  }  
  
 } 

二、AtomicInteger(待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值