wait、notify、nofityAll这三个方法只能在synchronized方法中调用,既无论线程调用一个对象的wait还是nofity方法,该线程必须先得到该对象的锁标记,这样,notify只能唤醒同一个对象监视器中调用wait的线程,使用多个对象监视器,就可以分别有多个wait、notify的情况。同组里的wait只能被同组的notify唤醒。
一个线程的等待和唤醒过程可以通过以下来表示
Thread t
↓
synchronized(this) 线程t得到对象的锁标记
↓
wait() 此时线程t被放置在对象的等待线程池中,t自动释放对象的锁标记
↓
notify() 当另外的线程执行了对象的notify()方法后,线程t可能会被从对象的等待线程池中释放出来,并且移动到等待线程对象的锁标记的线程池中,当t得到锁标记时就 会执行下去。