private int state = 1;private int n = 1;private ReentrantLock lock=newReentrantLock();private Condition condition1=lock.newCondition();private Condition condition2=lock.newCondition();private Condition condition3=lock.newCondition();
@Overridepublic voidrun(){new Thread(newRunnable() {
@Overridepublic voidrun() {//TODO Auto-generated method stub
for (int i = 0; i < 5; i++) {try{
lock.lock();while(state!=1)try{
condition1.await();
}catch(InterruptedException e) {//TODO: handle exception
e.printStackTrace();
}
System.out.print(Thread.currentThread().getName()+": ");for (int j = 0; j < 5; j++) {
System.out.print(n+++" ");
}
System.out.println();
state=2;
condition2.signal();
}finally{
lock.unlock();
}
}
}
},"线程1").start();new Thread(newRunnable() {
@Overridepublic voidrun() {//TODO Auto-generated method stub
for (int i = 0; i < 5; i++) {try{
lock.lock();while(state!=2)try{
condition2.await();
}catch(InterruptedException e) {//TODO: handle exception
e.printStackTrace();
}
System.out.print(Thread.currentThread().getName()+": ");for (int j = 0; j < 5; j++) {
System.out.print(n+++" ");
}
System.out.println();
state=3;
condition3.signal();
}finally{
lock.unlock();
}
}
}
},"线程2").start();new Thread(newRunnable() {
@Overridepublic voidrun() {//TODO Auto-generated method stub
for (int i = 0; i < 5; i++) {try{
lock.lock();while(state!=3)try{
condition3.await();
}catch(InterruptedException e) {//TODO: handle exception
e.printStackTrace();
}
System.out.print(Thread.currentThread().getName()+": ");for (int j = 0; j < 5; j++) {
System.out.print(n+++" ");
}
System.out.println();
state=1;
condition1.signal();
}finally{
lock.unlock();
}
}
}
},"线程3").start();
}