java--线程的生命周期

原创 2015年07月09日 14:08:05
当线程被创建并启动之后,它既不是一启动就进入执行状态,也不是一直处于执行状态,在其生命周期中,要经过"新建(New)"、"就绪(Runnable)"、"运行(Running')"、"阻塞(Blocked)"和"死亡(Dead)"五种状态。线程在创建之后,不可能一直霸占着CPU独立运行,需要在多个线程之间切换,所以大部分时间处于运行、阻塞之间切换。

  一、新建和就绪状态

  (1)、当用new关键字创建一个线程的时候,该线程就处于新建状态;

  (2)、调用start()方法之后,线程就进入了就绪状态。当不能立刻进入运行状态,要等待JVM里线程调度器的调度。

  注意:只能对处于新建状态的线程调用start()方法,否则会引发异常。

  二、运行和阻塞状态

  (1)、如果处于就绪状态的线程获得了CPU,就开始执行run方法,处于了运行状态。当分配的时间用完后,又进入了就绪状态,等待下次分配到CPU在进入运行状态。

  (2)、遇到以下几种情况,线程会进入阻塞状态:

  1)、线程调用sleep()方法主动放弃所占用的处理器资源

  2)、线程调用了一个阻塞式IO方法,在该方法返回之时,该线程被阻塞

  3)、线程试图获得一个同步监视器,但该同步监视器正被其他线程所持有。

  4)、现成在等待某个通知(notify)

  5)、线程调用了线程的suspend()方法将该线程挂起。该方法容易造成死锁,应尽量避免使用该方法。

  进入阻塞状态的程序遇到以下情况才能恢复进入就绪状态,等待分配到资源进入运行状态:

  1)、调用sleep()方法的线程经过了指定时间。

  2)、线程调用的阻塞式IO方法已经返回

  3)、线程成功的获得了试图取得的同步监视器

  4)、线程正在等待的某个通知时,其他线程发出了一个通知(signal)

  5)、处于挂起状态的线程被调用了resume()恢复方法

  三、线程死亡

  (1)、run()或call()方法执行完成,线程正常结束;

  (2)、线程抛出一个未捕获的Exception或Error;

  (3)、直接调用该线程的stop()方法来结束该线程---该方法容易导致死锁,不推荐。

  注意:当主线程结束时,其他线程不收任何影响,并不会随之结束。一旦子线程启动起来后,他就拥有和主线程相同的地位,他不会受主线程的影响。

  为了测试某个线程是否已经死亡,可以调用线程对象的isAlive方法,当线程处于就绪、运行、阻塞3中状态是,该方法返回true;当线程处于新建、死亡2种状态时,该方法将返回false.

  注意:不要试图对一个已经死亡的线程调用start()方法使它重新启动,该线程不可再次作为线程执行。start方法只能对处于新建状态的线程多使用,且只能使用一次!

相关文章推荐

线程生命周期流程图

  • 2013年06月09日 00:26
  • 314B
  • 下载

Java 之 线程的生命周期(二)

运行和阻塞状态        如果处于就绪状态的线程获得了CPU,开始执行run方法的线程执行体,则该线程处于运行状态,如果计算机只有一个CPU,那么在任何时刻只有一个线程处于运行状态。当然,在一个...

java 线程的生命周期

Thread线程的生命周期: 线程的生命周期分为创建(new)、就绪(Runnable)、运行(running)、阻塞(Blocked)、死亡(Dead)五种状态 创建(new) 在Java程序...

Java 之 线程的生命周期(一)

当线程被创建并启动以后,它既不是已启动就进入执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡...

java线程的生命周期及wait(),notify(),notifyAll()的详解分析

1.java线程的生命周期     线程是一个动态执行的过程,它也有一个从产生到死亡的过程。 (1)生命周期的五种状态     新建(new Thread)     当创建Thread类的一个实例(...

Java 之 线程的生命周期(三)

当线程结束后就处于死亡状态。线程结束的方式:         1.run或call方法执行完成,线程正常结束。         2.线程跑出一个未捕获的Exception或Error。        ...

java多线程之线程的生命周期

1.生命周期 一个事物从出生的那一刻开始到最终死亡中间的整个过程.在事物的漫长的生命周期过程中,总会经历不同的状态(婴儿状态/青少年状态/中年状态/老年状态...).线程也是有生命周期的,也是存在不...

Java复习之线程生命周期与线程池

这篇博客主要是用来复习Java中的线程的生命周期与线程池。

初学Java多线程:线程的生命周期(转)

初学Java多线程系列的本部分介绍线程的生命周期。与人有生老病死一样,线程也同样要经历开始(等待)、运行、挂起和停止四种不同的状态。这四种状态都可以通过Thread类中的方法进行控制。   ...

Java多线程(二):线程的生命周期和状态控制

转载自:http://blog.csdn.net/lonelyroamer/article/details/7949969 一、线程的生命周期 线程状态转换图: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java--线程的生命周期
举报原因:
原因补充:

(最多只允许输入30个字)