等待/通知机制,是指一个线程A调用了对象的O的wait()方法进入等待状态,而另一个线程B调用了对象O的notify()或notifyAll()方法,线程A收到通知后从对象O的wait()方法返回,进而执行后续动作。因此,等待通知机制需要与同步代码块或同步方法混合使用。
相关方法
方法名称 | 描述 |
---|---|
notify() | 通知一个在对象上等待的线程,使其从wait()方法返回,而返回的前提是该线程获取到了对象的锁 |
notifyAll() | 通知所有等待在该对象上的线程 |
wait | 调用该方法的线程进入WAITING状态,只有等待另外线程的通知或被中断才会返回,需要注意的是调用wait()方法后,会释放对象的锁 |
wait(long) | 等待超时返回(单位毫秒) |
注意细节
1.使用wait(),notify(),notifyAll()时需要先对调用对象加锁。
2.调用wait()方法后,线程状态有RUNNING变为WAITING,并将当前线程放置到对象的等待队列。
3.notify()或notifyAll()方法调用后,等待线程需要在调用notify()或notifyAll()的线程释放锁后,才有机会从wait()返回。
4.notify()方法将等待队列中的一个等待线程从等待队列中移到同步队列中,被移动的线程状态由WAITING转为BLOCKED。
5.从wait方法返回的前提是获得调用对象的锁。