1. wait 方法
-
作用:
wait():线程一旦执行此方法就会进入阻塞状态并释放同步监视器(对象锁)。
-
格式:
try { wait(); } catch (InterruptedException e) { e.printStackTrace(); }
2. notify 方法
-
作用:
notify() :线程一旦执行此方法,就会唤醒一个被 wait 阻塞的线程。
如果有多个被 wait 阻塞的线程则唤醒优先级高的线程。
如果线程优先级一致,将随机唤醒。
-
格式:
notify();
3. notifyAll 方法
-
作用:
notifyAll() :线程一旦执行此方法,将唤醒所有被 wait 阻塞的线程。
-
格式:
notifyAll();
4. sleep 方法 和 wait 方法的异同
- 相同点:
- 执行方法会让当前线程进入阻塞状态。
- 不同点
- 方法声明的位置不同。sleep 是 Thread 类;wait 是 Object类。
- 调用要求不同。sleep 都可以用;wait 只能在同步代码块或同步方法中。
- sleep 不会释放同步监视器对象;wait 会释放同步监视器对象。
5. 注意
- 只能在同步代码块或同步对象里使用。
- 必须使用和同步代码块的同步监视器(锁)相同的对象。
- 这三个方法是定义在 Object 包中。
- 使用 wait 方法会释放同步监视器对象(锁)。