isCancelled()
在true
中使用callable()
方法执行.invokeAll()
时给了我ExecutorService
标志。如果我尝试使用.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()具有一些逻辑,可以执行并行封装在作业周围的代码。我使用isCancelled()方法实现了。使用ExecutorService.submit(),结果为false。
请帮助。
答案 0 :(得分:0)
相应的答案在正确的ExecutorService
documentation中进行了解释:
invokeAll
:执行给定任务,返回期货列表,在所有完成或超时到期时(以先发生者为准)保存其状态和结果。
submit
:提交一个Runnable任务以执行并返回一个Future ,代表该任务的挂起结果。