使用interrupt来通知,而不是强制。
通常线程会在什么情况下停止
run方法执行完毕;出现异常且未捕获;
正确的停止方法:interrupt请求停止线程
通常情况(run方法内没有sleep或wait等会造成阻塞的方法)
通过thread.interrupt()中断线程,然后通过Thread.currentThread().isInterrupted()判断是否中断线程。
线程可能阻塞
阻塞时用interrupt停止线程是通过抛出InterruptedException来停止
注:在抛出InterruptedException后会清除掉Thread.currentThread().isInterrupted()标记位。
在while内try/catch会无法停止,需要包住while
实际开发中两种最佳实践
将出现的InterruptedException不用try/catch处理,而是传递给run方法处理。
不应该屏蔽中断:即不应该既不将异常传递给run方法也不重新设置中断。
响应中断的方法
如何停止线程:
如何处理不可中断阻塞
没有通用方法,针对不同的场景使用不同的方法