为了支持多线程之间的操作,jdk提供了线程等待(wait)和线程通知(notity)两个非常重要的方法,这两个方法是来自object类而不是thread类中。所以任何对象都可以调用这两个方法 。
当一个对象调用了wait()方法后,当前线程就会在这个对象上等待,直至其他线程调用了notity(),这就是线程之间的通信手段
如果一个线程调用了obj.wait(),它就会计入object对象的等待队列,在这个队列中,可能有多个线程,因为系统运行多个线程同时等待某一个对象。当object.notity()被调用时,它就会在这个等待的队列中,随机选择一个线程,并将其唤醒。
注意:1.这个唤醒是不公平的,不遵循先进先出,完全是随机的
2.wai()方法不是随便可以调用的,必须包含在synchronizied语句中
除notity()外,还有一个类似的方法notityAll(),顾名思义,就是唤醒所有等待的线程
为了方法理解,以下是一个简单的demo
public class waitAndNotity {
final static Object object = new Object();
public static class T1 extends Thread{
public void run(){
synchronized (object)