参考文档
https://www.cnblogs.com/peterxiao/p/7624931.html
http://www.cnblogs.com/timlearn/p/4008783.html
https://www.ibm.com/developerworks/cn/java/j-jtp05236.html
https://www.jianshu.com/p/7125725eff2e
https://www.jianshu.com/p/a8abe097d4ed
//中断机制
https://blog.csdn.net/pangpang123654/article/details/77336383
概念(java并发编程):
中断策略规定线程如何解释某个中断请求---当发现中断请求时,应该做那些工作,那些单元是原子操作,以及以多快速度来响应中断。
简单说,线程是不可以随便结束的,想要结束一个线程你得明白线程如何结束(how),什么时候结束合适(when),结束以后应该如何做好收尾工作,干些什么(what),得有一个很好应对策略才行。
举一个例子:
假如你这么结束一个阻塞的队列,可能会造成无限死循环
public String getNextTask(BlockingQueue<String > queue) {
boolean interrupted = false;
try {
while (true) {
try {
return queue.take();
} catch (InterruptedException e) {
interrupted = true;
Thread.currentThread().interrupt(); //结束的过位置不对,应该在finally中结束,不然就死循环了
// fall through and retry
}
}
} finally {
// if (interrupted)
// Thread.currentThread().interrupt(); //把上面的中文那个地方屏蔽了,写在这就对了
}
}
}
//测试的代码,把上面那个方法随便扔到一个Test类中
public static void main(String[] args){
BlockingQueue<String> queue = new LinkBlockingQueue<String>(2);
Test t = new Test();
//设置一个结束的标识,为了让阻塞队列抛出异常
Thread.currentThread().interrupt();
t.getNextTask(queue);
}
以上只是举了一个例子表明线程的中断操作前,一定要了解相应的中断策略,不然可能造成严重的后果,记录一下。