在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:\>
在这个例子中,提交的任务完成执行似乎很清楚。我已经在带有 Oracle 和 IBM JDK 的 JDK8 上运行它并得到相同的结果。
那么文档中的那一行是什么意思?还是有人为shutdownNow编写了这个并将其剪切n粘贴到文档中以不经意间关闭?
宝慕林4294392
慕运维8079593
相关分类