ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#### 简介 ``` 1. 这是多个线程间的一种协作机制 2. 线程之间有竞争同样也有协作 3. 一起完成某些任务时,在一个线程进行了规定操作后,就进入了等待状态, 等待其他线程执行完成后将其唤醒(notify),如果多个线程在进行等待, 可以使用notifyall来唤醒所有等待的线程 ``` #### 三个方法 wait ``` 状态: WAITING 线程不再活动,不再参与调度,进入 wait set 中,因此不会浪费 CPU 资源,也不会去竞争锁了,这时 的线程状态 即是 WAITING。它还要等着别的线程执行一个特别的动作,也即是“通知(notify)”在这个对象 上等待的线程从wait set 中 释放出来,重新进入到调度队列(ready queue)中 ``` notify ``` 通知对象的 wait set 中的一个线程释放;例如,餐馆有空位置后,等候就餐最久的顾客最先 入座。 ``` notifyAll ``` 通知对象的 wait set 上的全部线程释放 ``` 注: ``` 等待线程被notify后,不一定会立即恢复执行,它需要再次尝试获取锁 获取锁成功后: WAITING 状态变成 RUNNABLE 状态 没有成功获取锁: WAITING 状态又变成 BLOCKED 状态 ``` ``` 1. wait方法与notify方法必须要由同一个锁对象调用。因为:对应的锁对象可以通过notify唤醒使用同一个锁对 象调用的wait方法后的线程。 2. wait方法与notify方法是属于Object类的方法的。因为:锁对象可以是任意对象,而任意对象的所属类都是继 承了Object类的。 3. wait方法与notify方法必须要在同步代码块或者是同步函数中使用。因为:必须要通过锁对象调用这2个方 法 ``` 备注: 等待唤醒机制其实就是经典的“生产者与消费者”的问题