- 线程的生命周期
- New 初始化
当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();
-
- Runnable 可运行
调用start()方法后处于可运行状态。此时未获得CPU执行权。
-
- Running 运行中
Runnable的线程,在获取CPU执行权后,进入运行状态
-
- Block 阻塞
运行中的线程,由于某种原因,丧失CPU执行权,停止执行,直到再次进入可运行状态为止。
-
-
- 等待阻塞
-
如wait()方法,当前线程丧失锁对象,并释放CPU执行权;直到获取锁对象后,才进入runnable状态。
-
-
- 同步阻塞
-
当前线程在执行到被synchronized包裹的逻辑时,由于当前锁对象被其他线程占有,开始进入阻塞状态。
-
-
- 其他阻塞:sleep() , join() , 发出了I/O请求
-
通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
-
- Dead 消亡
线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
-
- 模型图1
-
- 模型图2