我想看看是否有可能shutdownNow()
一个仍有任务在执行的ExecutorService。
public static void main (String []args) throws InterruptedException
{
ExecutorService exSer = Executors.newFixedThreadPool(4);
List<ExecutorThing> lista = new ArrayList<>();
lista.add(new ExecutorThing());
lista.add(new ExecutorThing());
lista.add(new ExecutorThing());
lista.add(new ExecutorThing());
lista.add(new ExecutorThing());
List<Future<Object>> futureList = exSer.invokeAll(lista);
exSer.shutdownNow();
类ExecutitorThing如下:
public class ExecutorThing implements Callable<Object>{
public Object call() {
while (!(Thread.currentThread().isInterrupted()))
for (int i=0;i<1;i++)
{
System.out.println(Thread.currentThread().getName());
}
return null;
}
}
我想知道为什么即使我检查了中断标志,它也不会停止。。。shutdownNow应通过CCD_ 2终止任务。
我哪里错了?
提前谢谢。
PS在这个问题上,他们提供了与我使用的相同的解决方案,但它对我不起作用。也许是因为我使用invokeAll?
提前谢谢。
答案很简单,你只需要仔细阅读invokeAll
:的Javadoc
执行给定的任务,在所有任务完成时返回一个保持其状态和结果的期货列表
(重点是我的)。
换句话说,您的shutdownNow
永远不会被执行。我把你的代码改成了这个:
public class Test {
public static void main (String []args) throws InterruptedException
{
ExecutorService exSer = Executors.newFixedThreadPool(4);
exSer.submit(new ExecutorThing());
exSer.submit(new ExecutorThing());
exSer.submit(new ExecutorThing());
exSer.submit(new ExecutorThing());
exSer.shutdownNow();
}
}
class ExecutorThing implements Callable<Object> {
public Object call() throws InterruptedException {
while (!(currentThread().isInterrupted()))
System.out.println(currentThread().isInterrupted());
return null;
}
}
毫不奇怪,现在它的行为正如您所期望的那样。