线程状态概述和等待唤醒案例分析
线程状态概述
线程状态 | 导致状态发生条件 |
NEW | 至今尚未启动的线程处于这种状态 |
RUNNABLE | 正在Java虚拟机中执行的线程处于这种状态 |
BLOCKED | 受阻塞并等待某个监视器锁的线程处于这种状态 |
WAITING | 无限期地等待另一个线程来执行某一特定操作的线程处于这种状态 |
TIMED_WAITING | 等待另一个线程来执行取决于指定等待时间的操作的先处于这种状态 |
TERMINATED | 已退出的线程处于这种状态 |
阻塞状态 :具有cpu的执行资格,等待cpu空闲时执行
休眠状态 :放弃cpu的执行资格,cpu空闲,也不执行
等待唤醒案例分析
wait:线程不再活动,不再参与调度,进入wait set中,因此不会浪费CPU资源,也不会去竞争锁了,这时的线程状态即时WAITING。
它还要等着别的线程执行一个特别的动作,也即是“通知(notify)”在这个对象上等待的线程从wait set中释放出来,重新进入到调度队列中
notify:选取所通知对象的wait set中的一个线程释放;例如,参观有空位后,等待就餐最久的顾客最先入座。
notifyAll:通知所有的由于使用这个同步方法而处于等待的线程结束等待。