中断策略

参考文档

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);
   
  }

以上只是举了一个例子表明线程的中断操作前,一定要了解相应的中断策略,不然可能造成严重的后果,记录一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值