一、线程状态
1.New:尚未启动的线程的线程状态。
2.Runnable:可运行线程的线程状态,等待CPU调度。
3.Blocked:线程堵塞等待监视器锁定的线程状态。
表示线程进入等待状态,也就是线程因为某种原因放弃了CPU的使用权。如处于synchronized同步代码块或者方法中被阻塞。阻塞也分为几种情况(当一个线程试图获取一个内部的对象锁(非java.util.concurrent库中的锁),而该锁被其他线程持有,则该线程进入阻塞状态。)
- 等待阻塞:运行的线程执行了Thread.sleep、wait、join等方法,JVM会把当前线程设置为等待状态,当sleep结束,join线程终止或者线程被唤醒后,该线程从等待状态进入阻塞状态,重新占用锁后进行线程恢复
- 同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被其他线程锁占用了,那么JVM会把当前项城放入到锁池中
- 其他阻塞:发出I/O请求,JVM会把当前线程设置为阻塞状态,当I/O处理完毕则线程恢复
4.Waiting:等待线程的线程状态。
不带超时的方式:Object.wait、Thread.jion、LockSupport.park
5.Timed Waiting:具有指定等待时间的等待线程的线程状态。
带超时的方式:Thread.sleep、带参数的Object.wait、Thread.jion、LockSupport.parkNanos、LockSupport.parkUntil。
6.Terminated:终止线程的线程状态。线程正常执行完成或出现异常。
二、图示
![在这里插入图片描述](https://img-blog.csdnimg.cn/42c9c23a1bf84dedaed7811df7a07990.png)