java - shutdown 和 awaitTermination 哪个第一次调用有什么区别?

标签 java multithreading executorservice

有什么区别

ExecutorService eService = Executors.newFixedThreadPool(2);
eService.execute(new TestThread6());
eService.execute(new TestThread6());
eService.execute(new TestThread6());
eService.awaitTermination(1, TimeUnit.NANOSECONDS);
eService.shutdown();

eService.shutdown();
eService.awaitTermination(1, TimeUnit.NANOSECONDS);

我不太懂shutdown()。此方法不等待先前提交的任务完成执行。这是否意味着 shutdown() 可以终止已提交但未完成的任务?我尝试了一些例子,他们没有证明这一点,请给我一个例子。

最佳答案

你应该先调用shutdown。否则,您可能会等待很长时间,因为 awaitTermination 实际上并没有关闭您的执行程序。

如果你想等待任务完成,而不是等待执行器关闭,那么你应该使用invokeAll

关于java - shutdown 和 awaitTermination 哪个第一次调用有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18425026/

相关文章:

java - 在 Java 中通过循环返回 double 值

java - 异步线程停止主 UI 线程

c# - 如何确定谁拥有我的应用程序退出时仍在运行的工作线程?

c++ - 为什么 boost::thread 的析构函数分离可连接线程而不是像标准建议的那样调用 terminate()?

java - 使用ExecutorService确定性地将任务分配给线程

java - ScheduledExecutorService 在本地和测试服务器中工作,但在实时服务器中只运行一次

java - JSF 2 动态菜单处理的最佳实践?

java - Gradle WAR 构建后,WAR 文件两次包含静态资源

java - Sets/Lists 之间的循环和操作

java - 如何在使用执行器的同时启动线程?