首先先看如下例子
1 private static class BarWorker implements Runnable { 2 3 private static boolean exists = false; 4 5 private String name; 6 7 public BarWorker(String name) { 8 this.name = name; 9 } 10 11 public void run() { 12 if (!exists) { 13 exists = true; 14 System.out.println(name + " enter"); 15 System.out.println(name + " working"); 16 System.out.println(name + " leave"); 17 exists = false; 18 } else { 19 System.out.println(name + " give up"); 20 } 21 } 22 23 }
static变量exists用来实现同一时间只有一个worker在工作. 但是假设exists的判断和exists = true;之间有了
其他指令呢
bar2 enter
bar2 working
bar1 enter
bar1 working
bar1 leave
bar2 leave
看到两个线程同时工作了.
这时可以用AtomicBoolean
中间不会提供可乘之机.输出为
bar1 enter
bar1 working
bar2 give up