thread_AtomicBoolean
Boolean值的变化的时候不允许在之间插入,保持操作的原子性
它提供了原子性操作,其中exists.compareAndSet(false, true)这个操作把比较和赋值操作组成了一个原子操作,
中间不会提供可乘之机.输出为
AtomicBoolean 高效并发处理 “只初始化一次”
可以让一个线程等待另一个线程完成任务后再执行:
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"); } } }