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

    线程的生命周期会经历以下五种状态:

      新建:new创建线程对象时

      就绪:调用start()方法时

      运行:调用run()方法时

      阻塞:多种原因可导致阻塞

      死亡:多种原因

    发生以下情况时,线程将进入阻塞状态:

      调用sleep()方法时,此时会放弃它所占用的处理器资源(过了sleep指定时间不再阻塞)

      调用一个阻塞式IO方法还没有返回之前,该线程被阻塞(阻塞IO方法返回后不再阻塞)

      试图获取一个正被其它线程所持有的同步监视器(拿到监听器不再阻塞)

      等待通知时(notify)(其它线程调用了notify时不再阻塞)

      调用suspend()方法将程序挂起时(线程调用resume()方法时撤销挂起时不再阻塞)

    线程死亡情况:

      线程正常结束(run或call方法执行完毕)

      线程抛出一个未捕获的Exception或Error

      线程自己调用stop()方法(该方法容易导致死锁)

    PS:

      如果直接调用run()方法,系统会把该线程对象当成普通对象。

      如果直接调用了run()方法,则该线程不再处于新建状态,不能再次调用start()方法,否则会报IllegalThreadStateException异常

      如果直接调用了run()方法,则在run()方法里不能直接通过this.getName()方法获得线程名。

  • 相关阅读:
    Angular2.x-主/细节组件
    Angular2.x-显示heroes列表
    Angular2.x
    Linux-百度云之AccleriderMini使用
    Angular结构简单介绍
    Phonegap
    Deepin-安装vscode
    javascript 递归函数调用(recursive funciton call)
    go 中的pacage 名称 和import {}中的名称
    go get 下载的包放在哪里呢?
  • 原文地址:https://www.cnblogs.com/angeloaaron/p/12876225.html
Copyright © 2011-2022 走看看