线程通信的方法

135 阅读1分钟

1. wait 方法

  • 作用:

    wait():线程一旦执行此方法就会进入阻塞状态并释放同步监视器(对象锁)。

  • 格式:

    try {
        wait();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    

2. notify 方法

  • 作用:

    notify() :线程一旦执行此方法,就会唤醒一个被 wait 阻塞的线程。

    ​ 如果有多个被 wait 阻塞的线程则唤醒优先级高的线程。

    ​ 如果线程优先级一致,将随机唤醒。

  • 格式:

    notify();
    

3. notifyAll 方法

  • 作用:

    notifyAll() :线程一旦执行此方法,将唤醒所有被 wait 阻塞的线程。

  • 格式:

    notifyAll();
    

4. sleep 方法 和 wait 方法的异同

  • 相同点:
    1. 执行方法会让当前线程进入阻塞状态。
  • 不同点
    1. 方法声明的位置不同。sleep 是 Thread 类;wait 是 Object类。
    2. 调用要求不同。sleep 都可以用;wait 只能在同步代码块或同步方法中。
    3. sleep 不会释放同步监视器对象;wait 会释放同步监视器对象。

5. 注意

  1. 只能在同步代码块或同步对象里使用。
  2. 必须使用和同步代码块的同步监视器(锁)相同的对象。
  3. 这三个方法是定义在 Object 包中。
  4. 使用 wait 方法会释放同步监视器对象(锁)。