• 线程的生命周期


    线程状态

      新建

        (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()方法中断线程
  • 相关阅读:
    C++数据类型与C#对应关系 c#调用WINDWOS API时,非常有用(转)
    Web应用系统中关闭Excel进程
    jquery下一个空格带来的血案
    导出Excel时发生COM组件失败的解决方案
    水晶报表的交叉表中增加超级链接
    JavaScript和ExtJS的继承 Ext.extend Ext.applyIf (转)
    SQL SERVER 2000数据库置疑处理
    PHP中对淘宝URL中ID提取
    树莓派+蓝牙适配器连接蓝牙设备
    树莓派摄像头模块转成H264编码通过RTMP实现Html输出
  • 原文地址:https://www.cnblogs.com/tanlei-sxs/p/10004610.html
Copyright © 2020-2023  润新知