JDK1.5中提供了多线程的升级解决方法.
将同步synchronized替换成显示Lock操作.
将Object中的wait,notify,notifyAll,替换了Condition对象中的await(),signal(),signalAll().
该对象可以通过Lock锁的newCondition()方法进行获取.(一个锁可以对应多个Condition对象)
通过该对象,就可唤醒指定的线程.
如下是个小示例:
class Print2 {
private Lock lock =new ReentrantLock();
private Condition c1 = lock.newCondition();
private Condition c2 = lock.newCondition();
private Condition c3 = lock.newCondition();
private int flag = 1;
public void print1() throws Exception {
lock.lock();
if(flag!=1)
c1.await();
for (int i = 1; i <= 3; i++)
System.out.println("A: " + i);
System.out.println();
flag = 2;
c2.signal();
lock.unlock();
}
public void print2() throws Exception {
lock.lock();
if (flag != 2)
c2.await();
for (int i = 1; i <= 3; i++)
System.out.println("B: " + i);
System.out.println();
flag = 3;
c3.signal();
lock.unlock();
}
public void print3() throws Exception {
lock.lock();
if (flag != 3)
c3.await();
for (int i = 1; i <= 3; i++)
System.out.println("C: " + i);
System.out.println();
flag = 1;
c1.signal();
lock.unlock();
}
}