码迷,mamicode.com
首页 > 编程语言 > 详细

线程的生命周期

时间:2014-11-15 23:07:07      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   使用   sp   on   2014   

线程的生命周期分为:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、死亡(Dead)五个阶段。

线程启动后,随着CPU的调度,线程会在运行和阻塞两种状态间切换。

 

新建:使用new关键字创建一个线程后,线程就处于新建状态;

就绪:线程对象调用start方法后,线程处于就绪状态。此时线程能否运行取决于jvm线程调度器的调度;

运行:线程获得CPU后,进入运行状态;

阻塞:未死亡的线程失去CPU后进入阻塞状态;

死亡:线程run()方法执行完成;线程抛出未被捕获的Exception或Error;线程主动调用stop()方法结束当前线程。

 

线程从运行进入阻塞的情况:

  1. 线程调用sleep()方法,主动放弃所占用的处理器资源;
  2. 线程调用了一个阻塞式IO方法,在该方法返回之前,线程被阻塞;
  3. 线程试图获取一个同步监视器,但该同步监视器正被其他线程所持有;
  4. 线程在等待某个通知(notify);
  5. 程序调用了线程的suspend方法将线程挂起

线程从阻塞进入就绪状态:

  1. 调用sleep()方法的线程已经过了指定的时间;
  2. 线程调用的阻塞式IO方法已经返回;
  3. 线程成功获取了同步监视器;
  4. 线程接收到了通知;
  5. 处于挂起状态的线程被调用了resume()方法

线程状态转换图:

bubuko.com,布布扣

关于线程死亡:

  1. 主线程运行结束后,其他线程并不会随之结束。一旦子线程启动后就会拥有和主线程相同的地位。
  2. 可以使用isAlive()判断线程是否死亡,处于就绪、运行、阻塞状态下的线程isAlive()返回true,处于新建、死亡状态下的线程isAlive()返回false。
  3. 对已死亡的线程不可以使用start()使之重新启动。只能对新建的线程调用start()方法,但也只能调用一次。

线程的生命周期

标签:style   blog   http   io   ar   使用   sp   on   2014   

原文地址:http://www.cnblogs.com/amunote/p/4100745.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!