1 package test.synchornize; 2 3 import java.util.concurrent.locks.*; 4 5 class runab implements Runnable{ 6 boolean x = true; 7 static Lock lock = new ReentrantLock(); 8 static Condition con1 = lock.newCondition(); 9 static Condition con2 = lock.newCondition(); 10 runab(boolean x){ 11 this.x = x; 12 } 13 public void run() { 14 lock.lock(); 15 try { 16 System.out.println("Start---" + Thread.currentThread().getName()); 17 if(x) { 18 x = false; 19 //try {con1.await();con2.await();} catch (InterruptedException e) {} 20 try {con1.await();} catch (InterruptedException e) {} 21 } 22 System.out.println("End---" + Thread.currentThread().getName()); 23 } finally { 24 25 //con2.signalAll(); 26 con1.signalAll(); 27 lock.unlock(); 28 } 29 } 30 } 31 32 public class showLock { 33 34 public static void main(String[] args) { 35 runab rab = new runab(true); 36 runab rab1 = new runab(false); 37 Thread th = new Thread(rab); 38 Thread th1 = new Thread(rab1); 39 th.start(); 40 try { 41 Thread.sleep(100); 42 } catch (InterruptedException e) { 43 // TODO Auto-generated catch block 44 e.printStackTrace(); 45 } 46 th1.start(); 47 48 } 49 50 }