线程的生命周期

1、如何创建一个线程
      线程的生命周期的第一个阶段是创建阶段,线程是Thread.class实例的代表,因此,创建一个线程就是调用它的构造器。

2、启动一个线程
      一个线程在被构造出来的时候就已经存在了,也就是说当创建了一个线程实例的时候,该线程就已经存在了。只是这个时候它没有执行任何代码,这个线程是处于等待状态。
      在线程处于等待状态的时候,其他线程可以调用它,处于等待状态中的线程的各种各样的属性可以被设置,比如:优先执行权(priority)、线程的名字、它的守护进程的状态等等。因此,虽然该线程可能正处于等待状态,但是它的状态可以被其他线程改变。
      在这种处于等待线程的start()方法被调用后,这个新的线程被认为是激活状态。实际上,这个线程有一个isAlive()的方法,从这个方法中,我们可以知道这个线程的状态,也就是说,调用这个方法的时候,如果返回true,则证明该线程已经被启动了,而且正在执行run()方法中的代码;如果返回false,则证明该线程可能没有被启动或者已经执行完成了。
比如下述代码:

Runnable runable = new Runnable() {

           @Override

           public void run() {

              try {

                  // 让线程睡10秒钟

                  Thread.sleep(10 * 1000);

              } catch (InterruptedException e) {

                  e.printStackTrace();

              }

           }

       };

       Thread t = new Thread(runable);

       System.out.println("未调用start()方法时,线程t的状态为:" + t.isAlive());

       t.start();

       System.out.println("调用start()方法后,线程t的状态为:" + t.isAlive());

      运行结果为:

未调用start()方法时,线程t的状态为:false

调用start()方法后,线程t的状态为:true


3、结束的线程

    只要线程启动了,那么它只会执行run()方法,run()方法可能结构非常复杂,可能永远都执行不完,也或许它会调用上数百万的其他方法。不管怎样,只要这个线程的run()方法执行完成了,那么它就完成了它的执行过程。当一个线程执行了一行结束的代码,或者执行完了方法体中最后一行代码,或者执行过程中抛出了异常(或者捕获一个异常失败了),那么,这个线程就执行完了。

   在Thread.class的文档中,可以看到一个stop()方法,这个方法看起来像是被用来终止一个线程的,在现在的文档中,此方法是被建议为不可使用的,过时的方法。原来,stop()方法有一个天生存在的问题(一个内部竞争条件),一些java的实现禁止使用这个方法,并且安全管理器也常常禁止程序调用它。

    通常情况下,不需要去停止一个线程,因为线程执行一个固定的任务,并且你总是会希望这个任务执行完成。


4、暂停、恢复一个线程

    如果熟悉线程模型,你应该知道一个线程被暂停的观点,那就是一个线程在它执行的时候被告知要暂停。过一会儿,当一个线程被告知继续执行的时候,这个线程被恢复。Thread.class包含suspend()和resume()方法,但是它们同样具有和stop()方法一样的内部竞争条件问题,同样的,它们不推荐使用。

    当一个线程自己调用sleep()方法后,可以被暂停一个确定的时间。当暂停的时间结束了,线程立即开始执行sleep()后面的代码。

    严格的来说,调用的sleep()方法,并不等于线程被暂停了,这个时候,线程的isAlive()方法依然会返回true。一个重要的不同点在于,一个线程是真的被暂停,另一个线程(调用sleep()方法的线程)会被其他线程暂停,然后待会儿继续执行。反过来讲,sleep()方法只影响执行它的线程,它不可能使其它线程去睡觉。


5、清除线程

一个线程结束了,也就意味着它执行完了run()方法里面的所有代码。这个线程不再是活跃状态。然而,这个线程对象自己可能保持一些有趣的信息。只要其他的活动的对象引用了这个已经执行结束了的线程的信息,那么其他的线程就可以调用这个结束了的线程的方法,来获取这个有趣的信息。如果代表终止线程的线程对象超出范围,那么它将会被垃圾回收。在某些平台上,它也会对清除系统资源相关的线程有影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值