About shutdownNow of ExecutorService



我想看看是否有可能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;
  }
}

毫不奇怪,现在它的行为正如您所期望的那样。

相关内容

  • 没有找到相关文章

最新更新