方法中创建的线程池后,执行shutdown后任务还未放入到线程池中,会提前把线程池关闭吗?
比方说下面这个demo
这个方法在创建线程池threadPoolExecutor后,通过for循环向线程池加入任务的过程中,shutdown()方法是不是会先执行,导致任务无法全部加入到线程池中就把线程池关闭了
public String demo(List<File> file,String path) {
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
for (int x = 0; x < file.size(); x++) {
final int temp = x;
threadPoolExecutor.execute(() -> {
logger.info("threadName:" + Thread.currentThread().getName());
//添加任务temp
});
}
threadPoolExecutor.shutdown();
logger.info("执行shutdown():线程池关闭");
while (true) {
if (threadPoolExecutor.isTerminated()) {
logger.info("线程池所有的子线程全部执行完毕!");
return path;
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这两部分是同步的啊,怎么会出现你说的那种情况?
当然如果在
shutdown()
之后执行添加任务,会失败的。shutdown()
是运行完关闭的意思。加入到线程池,和关闭线程池都是在主线程中执行的,是单线程操作,你说的那种情况不会发生。