- New新创建
- Runnable可运行
- Blocked被阻塞
- Waiting等待
- Timed waiting计时等待
- Termminated被终止
1、新创建线程
使用new创建一个线程,该线程还没有开始运行,在运行前还有一些基础工作要做。
2、可运行线程
调用start方法,线程处于可运行状态。一个Runnable线程即可能正在运行也可能没有运行,取决于操作系统给该线程提供运行的时间。
3、被阻塞线程
一个线程尝试获取一个对象的内部锁时(synchronized 关键字,ReentrantLock等包含阻塞),而该锁被其他线程持有,进入被阻塞状态。直到其他线程释放该锁,线程调度器允许使用该锁时,该线程变为非阻塞状态。
此状态下不允许任何代码,消耗最少资源。
4、等待线程
一个线程(synchronized中调用了不带时限的wait,以及join,park等方法,以及等待Lock或不满足Conditon的条件调用了await)等待另一个线程通知调度器一个条件时(notify或notifyAll方法,或者等待join指定的线程结束,signal或signalall方法),跳出等待状态,等带锁的线程执行完毕,去竞争锁:竞争到锁,进入Runnable状态,没有竞争到锁,进入Blocked状态。
5、计时等待
Thread.sleep,Object.wait等设有超时参数,调用他们进入计时等待。
6、被终止
- 因run方法正常退出而自然死亡
- 因为一个没有被捕获的异常终止run方法意外死亡。