【问题标题】:how to tell if every Thread of a ThreadPool is waiting如何判断 ThreadPool 的每个线程是否都在等待
【发布时间】:2016-03-19 09:02:58
【问题描述】:

我有一个带有很多线程的 ThreadPool。 如果此线程池的每个线程都在等待 BlockingQueue,则任务完成。我怎样才能确定是否每个线程都在等待,以便我可以关闭线程池?

【问题讨论】:

  • 你打算如何关闭线程池?
  • 是的,那是另一个问题...是否有可能终止线程池中的所有等待线程?还是只是中断线程池中的所有线程?
  • BlockingQueue docs BlockingQueue 本质上不支持任何类型的“关闭”或“关闭”操作来指示不会添加更多项目。此类功能的需求和使用往往取决于实现。例如,一种常见的策略是生产者插入特殊的流尾或有毒对象,当消费者采用时会相应地解释。
  • 所以基本上当你完成将可处理的项目推入队列时,你将接收线程解释为关闭信号的项目放入。

标签: java multithreading thread-safety threadpool blockingqueue


【解决方案1】:

您应该调用shutdown(),然后调用awaitTermination(),并设置一个较长的超时值。任务完成后,它将关闭。

看到这个答案:How to wait for all threads to finish, using ExecutorService?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    相关资源
    最近更新 更多