Причина возврата true в isCancelled () в ExecutorService - PullRequest
0 голосов
/ 13 июня 2019

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.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 13 июня 2019

Ответ на этот вопрос объяснен в соответствующей ExecutorService документации :

  • invokeAll: Выполняет заданные задачи, возвращая список Фьючерсов с их статусом и результатами, когда истекает время завершения или истечения времени ожидания, в зависимости от того, что наступит раньше.

  • submit: отправляет выполняемую задачу для выполнения и возвращает Future , представляющий ожидающий результат задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...