В документации для ThreadPoolExector # shutdown сказано:
Этот метод не ожидает завершения выполнения ранее представленных задач
Чтоэто значит?
Потому что я бы сказал, что поставленные в очередь задачи могут не завершиться, но это не то, что происходит;см. пример кода, который вызывает завершение работы до завершения запуска всех отправленных задач:
package example;
import java.util.concurrent.*;
public class ExecutorTest {
public static void main(String ... args) {
ExecutorService executorService = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; i++) {
final int count = i;
executorService.execute(() -> {
System.out.println("starting " + count);
try {
Thread.sleep(10000L);
} catch (InterruptedException e) {
System.out.println("interrupted " + count);
}
System.out.println("ended " + count);
});
}
executorService.shutdown();
}
}
Что печатает:
C:\>java -cp . example.ExecutorTest
starting 0
starting 2
starting 1
ended 2
ended 0
starting 3
starting 4
ended 1
starting 5
ended 3
ended 5
ended 4
starting 7
starting 6
starting 8
ended 7
ended 6
ended 8
starting 9
ended 9
C:\>
В этом примере кажется довольно ясным, что отправленные задачи завершают выполнение,Я запустил это на JDK8 с Oracle и IBM JDK и получил тот же результат.
Так что же пытается сказать эта строка в документации?Или кто-то написал это для shutdownNow и вырезал и вставил его в документацию по непреднамеренному завершению работы?