Atomic是原子性,能够保证在高并发的情况下只有一个线程能够访问这个属性值。
compareAndSet(boolean expect, boolean update)。这个方法主要两个作用
1、比较AtomicBoolean和expect的值,如果一致,执行方法内的语句。
2、把AtomicBoolean的值设成update
public class AtomicBeanTest1 implements Runnable {
private static AtomicBoolean exists = new AtomicBoolean(false);//exits初始值为false
private String name;
public AtomicBeanTest1(String name){
this.name = name;
}
@Override
public void run() {
if(exists.compareAndSet(false,true)){//比较false和exists里的值(false)如果结果相等,把update赋值给exists;当线程2在进入是时exits与false判断不等,跳过if执行else
System.out.println((name + " enter"));
try {
System.out.println((name + " working"));
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println((name + " leave"));
exists.set(false);
}else {
System.out.println((name + "give up"));
}
}
public static void main(String[] args) {
AtomicBeanTest1 beanTest1 = new AtomicBeanTest1("beanTest1");
AtomicBeanTest1 beanTest2 = new AtomicBeanTest1("beanTest2");
new Thread(beanTest1).start();
new Thread(beanTest2).start();
}
}