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 }
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 try { 14 TimeUnit.SECONDS.sleep(1); 15 } catch (InterruptedException e1) { 16 // do nothing 17 } 18 exists = true; 19 System.out.println(name + " enter"); 20 try { 21 System.out.println(name + " working"); 22 TimeUnit.SECONDS.sleep(2); 23 } catch (InterruptedException e) { 24 // do nothing 25 } 26 System.out.println(name + " leave"); 27 exists = false; 28 } else { 29 System.out.println(name + " give up"); 30 } 31 } 32 33 }
1 private static class BarWorker implements Runnable { 2 3 private static AtomicBoolean exists = new AtomicBoolean(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.compareAndSet(false, true)) { 13 System.out.println(name + " enter"); 14 try { 15 System.out.println(name + " working"); 16 TimeUnit.SECONDS.sleep(2); 17 } catch (InterruptedException e) { 18 // do nothing 19 } 20 System.out.println(name + " leave"); 21 exists.set(false); 22 }else{ 23 System.out.println(name + " give up"); 24 } 25 } 26 27 }