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(待续)