zoukankan      html  css  js  c++  java
  • 线程的生命周期

    线程状态

      新建

        (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()方法中断线程
  • 相关阅读:
    while($info = mysql_fetch_assoc($result))
    网站问题搜索
    call apply js
    函数和变量名为啥不能包含
    js 函数 理解
    smtp 4个点
    使用视频作为网页背景的技术探讨
    php表达式内含表达式
    hook_theme作用小思考
    php中引用&的真正理解-变量引用、函数引用、对象引用
  • 原文地址:https://www.cnblogs.com/tanlei-sxs/p/10004610.html
Copyright © 2011-2022 走看看