考点:考察求职者对线程的理解 出现频率:★★★ 【面试题解析】线程的状态表示线程在某时间段内进行的活动和将要进行的任务程有创建、就绪、运行、阻塞、死亡5种状态。一个具有生命的线程,总是处于以下5状态之一。 1.创建状态
实例化 Thread对象,但没有调用 start()方法时的状态。
例如:
ThreadTest tt = new ThreadTest (); 或者
Thread t = new thread ( tt);
此时虽然创建了 Thread对象,但是它们暂时不能通过 isAlive ( )测试。
2.就绪状态 线程有资格运行,但调度程序还没有把它选为运行线程时所处的状态。此时,线程具备了运行的条件,一旦被选中,马上就能运行。
线程创建后,调用了 start( )方法,线程不处于运行状态,但能通过 isAlive( )测试。而且在线程运行之后,或者从被阻塞、等待或者睡眠状态回来之后,线程首先进入就绪状态 3.运行状态
从就绪状态池(注意不是队列,是池)中被选择为当前执行的线程所处的状态。
4.等待、阻塞或者睡眠状态 线程依然是活的,但是缺少运行的条件,一旦具备了条件,就可以转为就绪状态(不能直接转为运行状态)。另外, suspend()和stop( )方法已经被废弃了,比较危险,不要再使了。
5.死亡状态
一个线程的run()方法运行结束,那么该线程完成其使命,它的栈结构将解散,也就是死亡了。但是它仍然是一个 Thread对象,仍可以被引用,这一点与其他对象一样,而且被引用的对象也不会被垃圾回收器回收。 一旦线程死去,它就永远不能重新启动了,也就是说,不能再用 start()方法让它运行。
下面的示例会抛出Ⅲ legalThreadStateException异常,代码如下: t.start( ) ; t.start( ) ;
这是一种错误的用法。
参考答案: 一个线程一般有如下5个状态:创建状态、就绪状态、运行状态、等待(阻塞或睡眠)状态和死亡状态。