三个线程A、B、C轮流输出自己的线程名。如:ABCABCABC…
Lock lock=new ReentrantLock(); //定义三个线程共有的锁
Condition c1=lock.newCondition();
Condition c2=lock.newCondition();
Condition c3=lock.newCondition();
int flag=1;
public void printA(){
lock.lock();
try{
if(flag!=1)
c1.await();
System.out.println(Thread.currentThread().getName());
c2.signal();
flag=2;
}catch(Exception e){
e.printStackTrace();
}finally{
lock.unlock();
}
}
public void printB(){
lock.lock();
try{
if(flag!=2)
c2.await();
System.out.println(Thread.currentThread().getName());
c3.signal();
flag=3;
}catch(Exception e){}finally{
lock.unlock();
}
}
public void printC(){
lock.lock();
try{
if(flag!=3)
c3.await();
System.out.println(Thread.currentThread().getName());
c1.signal();
flag=1;
}catch(Exception e){}finally{lock.unlock();}
}