目前我有一个构造可以执行以下操作:
X
个线程(X
是来自用户的可配置变量)全部启动并等待任务变为可用。线程block
在等待
a BlockingQueue
。
另一个线程将任务放在阻塞队列中,被阻塞的线程接受任务和run
,然后返回wait
进行下一个任务。
无论如何这工作正常,但我有以下问题。即使两小时内没有任何线程,X
个线程也在不停地等待任务
即使只有let'say X / 50任务进入(即我有比我实际需要的更多的线程),X
线程实际上也可用。
所以我的问题是,我怎么能重构这个(可能使用Executors
),以便X
根据需要上下移动?
我的目标不是失去表现。我的意思是现在我可以拥有比我需要更多的线程(浪费资源)但是我没有创建新线程的开销。
我有兴趣以不浪费资源和保持相同性能水平的方式重构它。
答案 0 :(得分:1)
正常ThreadPoolExecutor就足够了。基本构造函数采用“核心池大小”(始终保持活动的最小线程数),最大大小(最大线程数)和多余线程的保持活动时间(核心池大小以上的空闲线程)的参数。此外,您可以直接为执行者传递BlockingQueue。
答案 1 :(得分:0)
1。尝试使用CachedThreadPool
,不仅可以回收,还可以在需要时创建新帖子。
2。 CachedThreadPool
的最棒的功能就是当一个线程在60秒内没有激活它被杀死了....所以不要浪费资源。
答案 2 :(得分:0)
您的用例已在ExecutorService.newCachedThreadPoolExecutor中实现。无论如何,我想继续执行你可以做各种事情来获得灵活的线程池。
我将列出一个这样的可能性