码迷,mamicode.com
首页 > 编程语言 > 详细

线程的生命周期

时间:2018-11-22 23:52:13      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:不能   垃圾回收   under   sleep   inter   end   star   判断   ack   

线程状态

  新建

    (new Thread)  创建一个空对象的线程,在这时可以通过Thread类的方法来设置线程各种属性

    ,如线程的 优先级(setPrioity),线程名(setName),和线程的类型(setDaemon)等

                          线程的类型 -->守护线程和后台线程  后台线程随守护线程结束而结束,垃圾回收器就是守护线程.

  就绪

    start()启动线程后,系统为该线程分配了除CPU外的所有资源,使该线程处于就绪状态,

    此外,如果某个线程执行了yield()方法,那么该线程会被暂时剥夺CPU资源,重新进入就绪状态 

  运行(活动)

    通过调度选中一个处于就绪的状态的线程,使其占有CPU资源并转为运行状态,此时,系统正真执行run()方法

      注:可以通过Thread类的isAlive方法来判断线程是就绪/运行状态  是的话返回true,返回false是可能线程处于阻塞或者停止状态

  阻塞和唤醒

    正在运行的 线程因为某些原因不能继续运行,就进入阻塞

      原因:1.当执行了某个线程的sleep()等阻塞类型的 方法,该线程对象会被置于一个阻塞及内  ,等待超时而自动苏醒

        2.当多个线程视图进入某个同步区域(synchronized)时,没能进入该同步区域的线程会被置于锁定集(LockPool)

        直到获得该同步区域的锁进入就绪状态

        3.当线程执行了某个对象wait()方法时,线程会被置于该对象的等待集(WaitPool)中,直到执行了该对象的notify()方法,

        wait()/notify()方法的执行要求线程首先获得该对象的锁

  死亡

   线程在run()方法执行结束后进入死亡状态,此外,如果线程执行了interrupt()stop()方法

   那么它会以异常退出的方式进入死亡状态  

       

这五种状态都可以通过Thread里面方法控制

终止线程的三种方法

  1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止,推荐使用
  2. 使用stop()方法强行终止线程(这个方法不推荐使用,因为stop和suspend,resume一样的也可能发生不可预料的结果)
  3. 使用interrupt()方法中断线程

 

线程的生命周期

标签:不能   垃圾回收   under   sleep   inter   end   star   判断   ack   

原文地址:https://www.cnblogs.com/tanlei-sxs/p/10004610.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!