【发布时间】:2018-10-19 07:39:42
【问题描述】:
我从主线程调用下面的代码,使用 ExecutorService 池并启动一个线程来处理找到的每个文件。 当主线程被 kill 命令终止时,我试图了解 ExecutorService 的行为。产生的线程会发生什么?他们是在完成工作后立即被杀还是终止?
还有没有更好/更安全的方法来编写下面的 sn-p,特别是如果我要在无限循环中运行这部分,例如等待文件被拖放到输入目录并分配线程来处理它们?在这种情况下,我应该在每个循环迭代中创建一个新的 Pool 和 .awaitTermination 吗?
非常感谢
ExecutorService executorService = Executors.newFixedThreadPool(maxThreads);
for (File inputFile : inputDir.listFiles()) {
if (inputFile.isFile())
executorService.submit(new MyRunnable(inputFile));
}
executorService.shutdown();
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
【问题讨论】:
-
你的意思是一旦你正在杀死JVM进程?
-
如果你杀死 JVM 进程,所有线程都会在进程中终止。线程始终运行在进程范围内。
标签: java multithreading executorservice