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 表示任务的挂起结果。