Boolean值的变化的时候不容许在之间插入,保持操做的原子性并发
它提供了原子性操做,其中exists.compareAndSet(false, true)这个操做把比较和赋值操做组成了一个原子操做,
中间不会提供可乘之机.输出为this
AtomicBoolean 高效并发处理 “只初始化一次”spa
可让一个线程等待另外一个线程完成任务后再执行: 线程
public static void main(String[] args) { Thread t2 = new Thread(new BarWorker("bb")); Thread t1 = new Thread(new BarWorker("aa")); t2.run(); t1.run(); } private static class BarWorker 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)) { // 当第一个线程设置为true后,另外的线程是进不来的 System.out.println(name + " enter" + "currentvalue=" + exists.get()); try { System.out.println(name + " working"); Thread.sleep(2000); } catch (InterruptedException e) { // do nothing } System.out.println(name + " leave"); exists.set(false); } else { System.out.println(name + " give up"); } } }