如何做出一系列已经与invokeAll
停止执行超时线程。
背景:
我有callables
我想等完成的列表。但是,如果他们没有在规定时间内完成(比如说一秒),我想取消它们。这似乎很容易与
executor.invokeAll(callables, 1000l, TimeUnit.MILLISECONDS);
所以一秒钟后,它会超时很好,我可以继续我的一天。但是在后台,线程仍然处于活动状态,可能会执行一些代码段。本质上他们不会中断,我不想发生 - 我希望线程停止执行。
有没有什么方法可以在invokeAll
超时后使用返回的期货清单来停止线程?
该文档说,返回的任务未完成时将被取消。 http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html#invokeAll%28java.util.Collection,%20long,%20java.util.concurrent.TimeUnit%29 – pshirishreddy
我认为他们被取消了,但他们仍然活着,甚至在'invokeAll'已经停止阻止后可以继续记录。 – Deepak
线程在做什么?有线程没有响应中断的各种可能的原因(阻塞IO,代码吃掉中断,代码忽略中断,等待进入同步块...) – bowmore