Future.cancel (true) возвращает true, но задачи не отменены - PullRequest
3 голосов
/ 20 июня 2019

На локальном компьютере у меня есть работающая задача, которую я отменяю с помощью future.cancel (true), которая возвращает true, и я вижу, что ThreadPoolTaskExecutor не имеет ожидающих задач.

Однако в другой среде (которая являетсяконтейнер), я вижу, что future.cancel (true) возвращает true, но ThreadPoolTaskExecutor не принимает новые задачи, поскольку предыдущие задачи не отменяются.

Есть идеи, почему это может произойти?Вот что я делаю.

Task task = new Task();
Future<String> future = threadPoolTaskExecutor.submit(task);

// wait for some time
boolean val = future.cancel(true)

// still cannot submit more tasks

private class Task implements Callable<String> {
    @Override
    public String call() throws InterruptedException {
        Thread.sleep(10000);
      return "value";
    }
}

1 Ответ

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

JavaDoc может быть понятнее, но на самом деле cancel отменяет будущее и, возможно, прерывает его поток.Если это удастся, возвращается true.Тем не менее, нет никакой гарантии, что поток действительно завершится в результате этого.В случае mayInterruptIfRunning это может произойти, если поток неправильно обрабатывает InterruptedException во всех местах.

См., Например, исходный код для FutureTask.cancel.

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