如果想要线程达到死亡状态,要在下面四种情况下:
线程死亡的情况
- 正常结束
- 线程抛出未捕获的exception或error
- 调用stop(数据不安全)
- interrupt方法
- 线程阻塞:抛出InterruptException异常,捕获异常后break跳出循环
- 线程未阻塞:采用isInterrupted判断线程是否中断
下面说一下如何正确使用interrupt方法中断线程
线程的设计中有两个地方判断是否接受到了中断信号,一个是while条件中的isInterrupted,它的值在收到中断信号后置为true;
另一种就是针对线程阻塞时接受到中断信号了。此时会抛出InterruptException异常,须在循环中捕获该异常,并显示break跳出。因为这种情况下isInterrupted不会被置为true。如果仅仅捕获后不做动作,该线程在下此进行循环判断时是不会停止的。详情结果请见下图:
去掉break的结果:线程仍在打印,没有被中断
添加break结果:线程已结束