首页 > 代码库 > Thread的生命周期

Thread的生命周期

Thread类中会影响thread生命周期的方法有:

package java.lang;

public class Thread implements Runnable {
    public void start();
    public void run();
    public void stop();                                //已废除,勿使用
    public void resume();                              //已废除,勿使用
    public void suspend();                             //已废除,勿使用
    public static void sleep(long millis);
    public static void sleep(long millis,int nanos);
    public boolean isAlive();
    public void interrupt();
    public boolean isInterrupted();
    public static boolean interrupted();
    public void join() throws InterruptedException;
    ......
}


创建Thread

生命周期的第一个阶段是thread的创建。创建Thread的对象可以使用默认构造方法,也可以使用重载的构造方法。重载的构造方法可以传线程名称或传Runnable对象、线程组对象等。所有的Thread都有名称以用来在虚拟机中进行识别。默认情况下,名称是由thread的信息所组成:它的priority、它的thread group等。

启动Thread

Thread在被构造后就会存在,但是在那个时间点还没有任何运行的程序代码。此时Thread是在等待的阶段。在这等待阶段,其他thread可以与已经存在的thread对象交互。等待中的thread有数种属性可以设定:它的priority、名称、daemon状态等。其实每个属性只是以调用等待中的thread的方法来设定。因此,即使thread是在等待,它的状态还是可以被其他thread改变。

当你已经准备好要thread运行程序代码时,可以调用它的start()方法。这个方法会执行一些内部的管理工作然后调用thread的run方法。当start()方法返回,此时就会有两个thread并行地执行着:初始的thread(调用start()方法的)与新开始的thread(正在运行run()方法的)。

在start()方法被调用之后,新的thread可说是“活跃的(alive)”。事实上,Thread类有一个isAlive()方法可指示thread所处的阶段:如果isAlive()方法返回true,则该thread已经被启动并且正在运行run()这个方法,如果isAlive()方法返回false,则该thread可能还没有启动或已经被终结了。

Thread的终结

一旦启动后,thread只能执行一个方法:run()方法。这个方法可以很复杂,它可以永远地执行下去,且它也可以调用其他的方法。无论如何,一旦run()方法完成了执行动作,thread也就必须完成它的执行动作。如同其他的java方法,run()方法在执行到return语句时结束或是执行到程序代码的最后一行,又或是它抛出一个异常。

因此,终结thread的唯一办法就是安排run()方法完成。如果你查看Thread类的说明文件,会发现此类具有一个stop()的方法似乎可以用来终结一个thread。但是stop()方法有个固有的问题,因此,stop()方法已经被废除了。

Thread的暂停(pausing)、挂起(suspending)、恢复(resuming)

一旦thread开始执行它的run()方法,它会持续执行到run()完成为止。如果你熟悉其他线程模型,可能早已经知道“thread suspension”的概念,意思就是thread被告知要暂停它的执行动作。稍后thread会被恢复,也就是被告知继续它的执行动作。

Thread类具有suspend()与resume()这两个方法,但它们同样跟stop一样,也已被废弃掉了。thread是可以通过调用sleep()方法来挂起自己的执行动作一段指定的期间。当thread执行到sleep()方法时,它会在所谓的沉睡时间暂停所给数目的毫称时间。当暂停时间到时,thread会被叫醒并继续执行sleep方法下一行的语句。注明:thread可以使用等待与通知机制来实现thread的中断与恢复,差别在于该thread必须使用这个技术来编写。


未完待续..............................................

Thread的生命周期