gpt4 book ai didi

Java - 管理线程池的大小(增加 moSTLy)

转载 作者:行者123 更新时间:2023-11-30 06:31:12 28 4
gpt4 key购买 nike

我正在尝试在 Java 中使用线程池。但是线程的数量是未知的,所以我试图找到一个解决方案。然后出现两个问题:

  1. 一段时间以来,我一直在寻找增加线程池大小的方法,但我还没有想出办法。有什么建议吗?有人说 Executors.newCachedThreadPool() 应该可以工作,但在方法的定义中它说它适用于短时间线程。

  2. 如果我将线程池的大小设置为较大的数字(如 50 或 100)会怎样?它工作正常吗?

最佳答案

  1. 您也可以将 Executors.newCachedThreadPool 用于更长期的任务,但问题是,如果您有长期运行的任务,并且不断添加它们并且比现有任务完成的频率更高,那么数量的线程将失去控制。在这种情况下,使用(更大的)固定大小线程池并让更多任务在队列中等待空闲线程可能是更好的主意。

  2. 这只意味着您将(可能)有很多大部分时间都在 hibernate (空闲)的 Activity 线程。基本上要考虑的事情是

    • 您的系统可以处理多少个线程(即总共可以创建多少个线程,在 Windows 机器中,这可能少于 1000 个,在 Linux 中,您可以获得数万个线程,通过一些调整甚至更多系统配置)
    • 每个线程在内存方面至少消耗单个线程的堆栈大小(在 Linux 中,默认情况下每个线程大约 1-8MB,同样可以通过 ulimits 和 JVM 的 进行调整- Xss -参数)
    • 至少对于 NPTL, hibernate 线程的上下文切换惩罚应该最小或几乎为零,因此过多的线程在 cpu 使用方面不会“很重”

也就是说,最好使用 ThreadPoolExecutor的构造函数直接获得您想要的池类型。

关于Java - 管理线程池的大小(增加 moSTLy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9826433/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com