线程的通信

线程通信的三个方法

  1. wait()

一旦执行此方法线程就进入阻塞状态,并暂时释放锁。

  1. notify()

一旦执行此方法就会唤醒被wait的一个线程(优先级高的)

  1. notifyAll()

一旦执行此方法就会唤醒所有被wait的线程

注意

这三个方法必须使用在synchronized中。且它们的调用者必须是同步监视器。这三个方法定义在Object 中。

sleep 和 wait的异同

  1. 相同点
    1. 都可以使当前的线程进入阻塞状态
  2. 不同点
    1. sleep声明到Thread中的静态方法,wait定义在Object中的方法
    2. sleep可以在任何地方调用,wait只能使用在同步代码块或方法中
    3. sleep不会释放锁,wait会

      经典问题:生产者和消费者的问题

在生产者生产满或者消费者消费完的时候调用wait()
在生产者生产了一个产品,或者消费者消费一个产品时调用notify()