多线程
线程的生命周期有五个状态。
1、新建(New):线程对象已经创建,还没有在其上调用 start() 方法;
2、就绪(Runnable):当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当 start() 方法调用时,线程首先进入就绪状态。在线程运行之后或者从阻塞、等待或睡眠状态回来后,也返回到可运行状态。
3、运行(Running):线程调度程序从可运行池中选择一个线程作为当前线程时线程所处的状态。这也是线程进入运行状态的唯一一种方式。
4、阻塞(Blocked):这是线程有资格运行时它所处的状态,线程仍旧是活的,但是当前没有条件运行。换句话说,它是可运行的,但是如果某件事件出现,他可能返回到可运行状态。
阻塞的情况分三种:
1、等待阻塞:运行的线程执行 wait()方法,JVM 会把该线程放入等待池中。
2、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则 JVM 会把该线程放入锁池中。
3、其他阻塞:运行的线程执行 sleep() 或 join()方法,或者发出了 I/O 请求时,JVM 会把该线程置为阻塞状态。当sleep() 状态超时、join() 等待线程终止或者超时、或者 I/O 处理完毕时,线程重新转入就绪状态。
5、终止:当线程的 run() 方法完成时就认为它死去。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦死亡,就不能复生。如果在一个死去的线程上调用 start()方法,会抛出 java.lang.IllegalThreadStateException 异常。

各状态间的转换条件如下图所示:

【参考文献】
http://blog.csdn.net/u012152619/article/details/46495641
http://blog.csdn.net/u012152619/article/details/46508815

浙公网安备 33010602011771号