线程的生命周期

线程状态

  新建

    (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()方法中断线程

 

posted @ 2018-11-22 23:09  言西早石头侠  阅读(239)  评论(0编辑  收藏  举报