说明
AtomicBoolean 这个类,他是线程安全的,它的compareAndSet方法是利用CAS来实现线程安全的。
方法
public final boolean compareAndSet(boolean expect, boolean update) {
int e = expect ? 1 : 0;
int u = update ? 1 : 0;
return unsafe.compareAndSwapInt(this, valueOffset, e, u);
}
作用
判断对象当时内部值是否为第一个参数,如果是则更新为第二个参数,且返回ture,否则返回false。
用途
保证某段语句只执行一次,只有一个线程执行,类似于锁的操作
示例
当默认初始化为false时,如下:
protected final AtomicBoolean started = new AtomicBoolean(false);
则一个线程把他变为ture,compareAndSet返回ture,进入方法体执行逻辑,那么其他的任何线程进入该方法执行compareAndSet时第一个参数为false,而对象的内部值已经被修改为true,则永远过不了if,例如:
public void start() throws Exception {