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();
}
}