在 ExecutorService 中的 isCancel() 中返回 true 的原因


isCancelled()

ExecutorService中使用.invokeAll()方法执行callable()时给了我true标志。如果我尝试使用.submit()会给我false否则。使用invokeAll()方法时获得真实是什么?

ExecutorService executorService = 
Executors.newSingleThreadExecutor();
Set<Callable<String>> callables = new. 
HashSet<Callable<String>>();
callables.add(new Callable<String>() {
    public String call() throws Exception {
        executeCommand();
    return "Task 1";
 }
});
callables.add(new Callable<String>() {
     public String call() throws Exception {
         executeCommand();
    return "Task 2";
 }
});
callables.add(new Callable<String>() {
    public String call() throws Exception {
         executeCommand();
    return "Task 3";
}
});
List<Future<String>> futures = 
executorService.invokeAll(callables);
for(Future<String> future : futures){
    System.out.println(future.isCancelled());
    System.out.println("future.get = " + future.get());
}
executorService.shutdown();

考虑上面的例子,其中executeCommand((有一些逻辑来执行围绕作业的并行代码。我使用 isCancel(( 方法得到真。使用 ExecutorService.submit(( ,它给出 false。

请帮忙。

正确的ExecutorService文档中对此进行了解释:

  • invokeAll :执行给定的任务,当所有任务完成或超时到期时(以先发生者为准(,返回保留其状态和结果的期货列表。

  • submit :提交一个可运行任务进行执行,并返回一个 Future 表示任务的挂起结果。

相关内容

  • 没有找到相关文章

最新更新