java shutdownnow_java – ExecutorService.shutdownNow()不会关闭线程

我正在运行一个高度并发的

Java程序.

虽然许多线程正在向执行程序服务提交任务,但在某个点上主线程调用ExecutorService.shutdownNow().

在这个行动之后,我希望:

>执行程序服务不接受任何其他任务

>执行程序服务的队列清晰

>其余正在运行的工作程序被中断,也就是说,如果他们正确地管理InterruptedException并且/或者显式检查Thread.currentThread(),它们会在某个时刻关闭.isInterrupted()

由于我处于以下情况:

>执行程序服务由于ExecutorService.shutdownNow()而“关闭”,但没有关闭,也就是说,ExecutorService.awaitTermination(long,TimeUnit)永远不会返回true

>我的执行程序服务管理的一些挂起的线程在BlockingQueue.take()上等待

>如果我再次调用ExecutorService.shutdownNow(),则挂起的线程会因BlockingQueue.take()上的InterruptedException而死亡

我想在调用BlockingQueue.take()之前,这些线程已经收到了中断,并且忽略了InterruptedException.

我还想知道ExecutorService.shutdownNow()是否是线程安全的,即,即使线程池正在接收许多提交,它也能正常工作.

总而言之,我有两个问题:

>有没有可以解释我情况的替代方案?

> ExecutorService.shutdownNow()可能不是线程安全的吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值