当线程被创建并启动之后,它既不是一启动就进入执行状态,也不是一直处于执行状态,在其生命周期中,要经过“新建(New)”、“就绪(Runnable)”、“运行(Running')”、“阻塞(Blocked)”和“死亡(Dead)”五种状态。线程在创建之后,不可能一直霸占着CPU独立运行,需要在多个线程之间切换,所以大部分时间处于运行、阻塞之间切换。
一、新建和就绪状态
(1)、当用new关键字创建一个线程的时候,该线程就处于新建状态;
(2)、调用start()方法之后,线程就进入了就绪状态。当不能立刻进入运行状态,要等待JVM里线程调度器的调度。
二、运行和阻塞状态
如果处于就绪状态的线程获得了CPU,就开始执行run方法,处于了运行状态。当分配的时间用完后,又进入了就绪状态,等待下次分配到CPU在进入运行状态。
进入阻塞状态的程序遇到以下情况才能恢复进入就绪状态,等待分配到资源进入运行状态:
三、线程死亡
(1)、run()或call()方法执行完成,线程正常结束;
(2)、线程抛出一个未捕获的Exception或Error;
(3)、直接调用该线程的stop()方法来结束该线程———该方法容易导致死锁,不推荐。
注意:当主线程结束时,其他线程不收任何影响,并不会随之结束。一旦子线程启动起来后,他就拥有和主线程相同的地位,他不会受主线程的影响。
为了测试某个线程是否已经死亡,可以调用线程对象的isAlive方法,当线程处于就绪、运行、阻塞3中状态是,该方法返回true;当线程处于新建、死亡2种状态时,该方法将返回false。
|