标签:
前文中已经提到了,关于多线程的基础知识和多线程的创建。但是如果想要很好的管理多线程,一定要对线程的生命周期有一个整体概念。本节即对线程的一生进行介绍,让大家对线程的各个时段的状态有一定了解。
线程的一生的状态过程
如下图:
① | 新建New---->就绪Runnable | 运行Start()方法 |
② | 就绪Runnable---->运行Running | 获得cpu资源 |
③ | 运行Running---->阻塞Blocked |
进入睡眠、 被挂起、 等待其他资源、 等待某个通知(后文会讲到)、 等待某个IO资源 |
④ | 阻塞Blocked---->就绪Runnable |
睡眠时间到、 挂起后被重新恢复、 等待资源已经被释放、 获取到其他线程的通知(后文会讲到)、 IO方法已经返回 |
⑤ | 运行Running---->就绪Runnable |
处理器放弃当前线程,处理其他线程去了 |
⑥ | 运行Running---->死亡Dead |
当前线程的执行体已经被运行结束、 当前线程抛出了无法解决的异常或错误 |
其它一些需要注意的地方:
(1)线程启动后,并不会立刻运行,具体运行时间要看虚拟机的调度(前文中有讲)
(2)线程一旦死亡就不能再重新启动就绪(使用Start方法),如果强制启动会抛出异常。
(3)想判断当前的线程是否已经被启动并且还未死亡(就绪、运行、阻塞),可以使用isAlive()方法判断
(4)启动线程进入就绪状态请务必使用Start()方法启动,而非Run方法,原因在创建多线程时也曾经讲过。
(5)线程一旦启动,大家都是独立的处理,并不会因为父线程(创建并启动子线程的线程)出现某种状态,而影响到自身(如父线程死亡后,子线程仍然会继续运行)。
标签:
原文地址:http://www.cnblogs.com/jilodream/p/4289316.html