0

目前我有一个构造执行以下操作:
An X线程数(X是来自用户的可配置变量)都已启动并等待任务变为可用。等待 a BlockingQueue的线程block
另一个线程将任务放置在阻塞队列中,被阻塞的线程执行任务并返回wait进行下一个任务。
无论如何,这工作正常,但我有以下问题。即使没有任何2小时,线程也会不断地等待任务。
另外X线程实际上是可用的,即使只有让我们的X/50任务进入(即我有比我实际需要更多的线程)。
所以我的问题是,我怎么能重构这个(也许使用Executors),以便X根据需要上升和下降?
我的目标不是失去表现。我的意思是现在我可以拥有比我需要的更多的线程(浪费资源),但我没有创建新线程的开销。
我有兴趣重构这种方式,不要浪费资源并保持相同的性能水平。我该如何整合执行者?或者我怎么能改善这个线程池?

回答

1

正常ThreadPoolExecutor应该就足够了。基本构造函数为“核心池大小”(最小线程总数保持活跃),最大大小(最大线程数量)和超额线程保持活动时间(空闲线程超过核心池大小)提供参数。此外,您可以直接将执行者的BlockingQueue传递给执行者。

0

尝试使用CachedThreadPool,这将不仅回收,但在需要时创建新的线程..

2.最真棒功能CachedThreadPool当线程在60秒内没有被激活,所以不会造成资源浪费。

+0

取决于OP在做什么,他可能需要对线程的最大数量设置限制 – assylias 2012-08-05 10:44:19

+0

但是,我如何整合这个?在'CachedThreadPool'中,你提交'Runnables'吧?现在我有'线程'等待在队列中。我将如何从一个设计走向另一个? – Cratylus 2012-08-05 10:44:33

+1

@ user384706:一个'Thread'实现'Runnable' – 2012-08-05 10:57:25

0

您的用例已在ExecutorService.newCachedThreadPoolExecutor中实现。无论如何,我想继续执行你可以做各种事情来获得灵活的线程池。

我将列出一个这样的可能性

  1. 写一个主线程持有的队列和工作单位(任务)分配给各个线程,而且它保持它的线程运行,已经返回结果单位并阻止哪些线程。使用这些信息,您的主线程可以在需要时轻松地负载均衡和创建/销毁线程(从属)。
相关问题