简述线程的生命周期

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

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

原文地址:https://www.cnblogs.com/angeloaaron/p/12876225.html