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()方法获得线程名。

  • 相关阅读:
    JavaOne Online Hands-on Labs
    Using DTrace to Profile and Debug A C++ Program
    怎样挑选电线?家装用线越大越好吗?
    ORACLE DTRACE DOC
    内核书
    SQL Server vNext CTP 1.2
    用VS Code打造最佳Markdown编辑器
    opendtrace 开源汇总
    DTrace C++ Mysteries Solved 转
    MYSQL-RJWEB 博客学习
  • 原文地址:https://www.cnblogs.com/angeloaaron/p/12876225.html
Copyright © 2011-2022 走看看