线程的通信
线程通信的三个方法
- wait()
一旦执行此方法线程就进入阻塞状态,并暂时释放锁。
- notify()
一旦执行此方法就会唤醒被wait的一个线程(优先级高的)
- notifyAll()
一旦执行此方法就会唤醒所有被wait的线程
注意
这三个方法必须使用在synchronized中。且它们的调用者必须是同步监视器。这三个方法定义在Object 中。
sleep 和 wait的异同
- 相同点
- 都可以使当前的线程进入阻塞状态
- 不同点
- sleep声明到Thread中的静态方法,wait定义在Object中的方法
- sleep可以在任何地方调用,wait只能使用在同步代码块或方法中
- sleep不会释放锁,wait会
经典问题:生产者和消费者的问题
在生产者生产满或者消费者消费完的时候调用wait()
在生产者生产了一个产品,或者消费者消费一个产品时调用notify()