如果假设每个线程可能需要不同的时间来完成,我如何将线程生成到可能的最大数量。我们的想法是产生尽可能多的线程,同时不会导致死亡。
E.g。虽然(spawnable)产生更多线程;
我正在尝试生成线程以调用ejb,我希望产生可能的最大数量来模拟负载,同时不会导致线程进入内存不足异常。
答案 0 :(得分:6)
Executors.newFixedThreadPool()或者为了更好地控制,请创建自己的ThreadPoolExecutor。
答案 1 :(得分:2)
没有固定答案。您需要根据主机功能调整线程数。
为了回应内存问题,不仅存在多少个线程,还包括它们的工作。如果他们执行简单的调用或者必须处理大型数组,那就不一样了。
相对于性能而言,并假设您的主机是专用的,每个核心一个线程的值是最小值。鉴于他们将要调用远程系统,这些线程中的大多数将花费一些时间闲置;根据您可以产生更多或更少的空闲时间的比例。
从本质上讲,取决于你的主机性能并调整你的线程数。
答案 2 :(得分:1)
这里引用了Executor框架,它确实是一个很棒的工具(已经+ 1'代表答案)。
但我相信OP想要的是Executors.newCachedThreadPool()。
来自文档:
创建一个线程池,根据需要创建新线程,但是会 在先前构造的线程可用时重用
有关执行者的更多信息here