线程间通信
我们已经看到如何使用同步锁住方法或代码块避免导致末控制线程在程序中执行虽然这给我们某周程度的控制我们的程序仍是低效的在最后一个例子中在当前线程可以介理地继续工作前有一些在我们用循环等待一个职员线程完成一个操作的机会例如当Clerk对象仍忙于处理前一个线程时我们不能将一个交易交给这个对象解决的方法是用一个while循环一次次地测试Clerk对象的繁忙状态并存两次测试之间调用sleep()方法但有一个更好的方法
Object类定义了wait() notify()和notifWAll()方法你可以用这些方法为处理这种情况提供更有效的方法因为所有的类由Object派生所以所有的类继承了这些方法你可以在synchronized方法或一个同步代码块中调用这些方法如果你没有这么做会抛出一个IIlegalMonitrstateException类型的异常这些方法执行的功能是
wait()和notify()方法的基本思想是为针一对一个特定的对象被同步的方法或代码块提供通信方一个块可以调用wait()挂起它的操作直到针对同一对象的其他同步方法或代码块用某种方式改变它并调用nntify()知这个变化完成了因为与之同步的对象的某些特性没有被设置或没有满足某此条件一个线程会有代表性地调用wait()这依赖于另一个线程的行动也许最简单的情况是由于几一个资源正被另一个线程修改所以处于繁忙但你决不会受限于此
[] [] [] [] [] [] [] [] []