java中的线程池问题

时间:2017-02-17 04:50:32

标签: java thread-synchronization java-threads

HI在应用程序中使用以下代码

threadPool.shutdown();
        while (!threadPool.awaitTermination(10, TimeUnit.SECONDS)) {
            logger.info("Waiting for "
                    + (threadPool.getQueue().size() + threadPool
                            .getActiveCount()) + " jobs to complete.");
        }

当应用程序运行时,它在循环中被触发

  • 等待134个工作完成。
  • 等待134个工作完成。
  • 等待134个工作完成。

上面的语句是连续出现的,实际上线程正在对数据库执行更新操作。在这种情况下,将时间增加到10秒以上会有所帮助。任何建议都有帮助

1 个答案:

答案 0 :(得分:0)

ThreadPoolExecutor.shutdown()的文档说:

  

启动以前提交的任务的有序关闭   已执行,但不会接受任何新任务。调用没有   如果已经关闭,则会产生额外的影响。

这意味着您的工作线程负责关闭自己。您没有为您的工作人员提供代码,但我假设他们正在执行无法退出的阻止操作。解决此问题的常用方法是让工作人员定期检查在shutdown调用之前设置的某种共享变量。他们被有效地告知要停止他们正在做的事情。 AtomicBoolean应该可以解决问题。