您正在等待并通知其他对象( 监视器 )。
这个想法是,你在做和
obj.wait()做的
obj.notify()时候可以打电话等待一个人做。
objA.wait()``objB.notify()
将您的
printOdd方法更改为类似
private void printOdd(int i) { synchronized (lock) { // <------- while (!oddTurn) { try { lock.wait(); // <------- } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(type + i); oddTurn = false; lock.notifyAll(); // <------- }}和
printEven方法类似。
然后为提供
NumberPrinter一个
lock对象:
Object lock = new Object();Thread odd = new Thread(new NumberPrinter("odd", lock));Thread even = new Thread(new NumberPrinter("even", lock));输出:
odd1even2odd3even4odd5even6odd7even8odd9



