我们应该为长时间运行的线程使用线程池吗?

时间:2015-08-27 18:37:23

标签: threadpool java-threads

我们是否应该为长时间运行的线程使用线程池或启动我们自己的线程?有一些设计模式吗?

1 个答案:

答案 0 :(得分:3)

不幸的是,这取决于。没有严格的规则说您应该始终使用线程池。

线程池提供两个主要内容:

  1. 委托创建/重用线程。
  2. 背压
  3. IMO,这是一个有趣的背压属性,但往往是最不了解的。您的计算机在一组有限的资源上运行。如果你有(比方说)8个CPU内核并且它们都在忙着工作,你想要以某种方式表明添加更多工作(提交更多任务)并不会有所帮助,至少在延迟方面没有帮助。

    这是java.util.concurrent.ExecutorService实施允许您指定所选java.util.concurrent.BlockingQueue的原因。当此队列变满时,调用线程将阻塞,直到线程池已设法完成正在进行的任务。

    是否在线程池中拥有长时间运行的线程取决于它正在做什么。如果线程一直很忙(意味着它永远不会完成),那么它将总是占用线程池中的一个插槽,这是毫无意义的。

    关于委托创建/重用线程;也许你可以有两个池,一个用于长期运行的任务,另一个用于其他任务。或者也许是一个长时间运行的线程池,只有一个插槽,这将阻止两个长时间运行的任务同时运行,前提是这就是你想要的。

    正如你所看到的,没有一个好的答案。它实际上归结为您想要实现的目标以及您希望如何使用手头的资源。