【发布时间】:2017-09-13 13:58:45
【问题描述】:
问题:
如何让一系列因invokeAll 而超时的线程停止执行。
背景:
我有一个callables 列表,我想等待完成。但是,如果它们没有在设定的时间内(比如一秒钟)完成,我想取消它们。这似乎很容易
executor.invokeAll(callables, 1000l, TimeUnit.MILLISECONDS);
所以一秒钟后它就会超时,我可以继续我的一天。然而,在后台线程仍然处于活动状态并可能执行一些代码。基本上它们不会被打断,这是我不想发生的——我希望线程停止执行。
在invokeAll 超时后,有什么方法可以使用返回的期货列表来停止线程?
【问题讨论】:
-
文档说,当返回的未完成的任务被取消时。 docs.oracle.com/javase/6/docs/api/java/util/concurrent/…
-
我认为它们已被取消,但它们仍然有效,即使在
invokeAll停止阻止后仍可以继续记录 -
线程在做什么?线程不响应中断的原因有很多种(阻塞IO、代码吃掉中断、代码忽略中断、等待进入同步块……)
标签: java multithreading executorservice