目前我有一个构造执行以下操作:
An X
线程数(X
是来自用户的可配置变量)都已启动并等待任务变为可用。等待 a BlockingQueue
的线程block
。
另一个线程将任务放置在阻塞队列中,被阻塞的线程执行任务并返回wait
进行下一个任务。
无论如何,这工作正常,但我有以下问题。即使没有任何2小时,线程也会不断地等待任务。
另外X
线程实际上是可用的,即使只有让我们的X/50任务进入(即我有比我实际需要更多的线程)。
所以我的问题是,我怎么能重构这个(也许使用Executors
),以便X
根据需要上升和下降?
我的目标不是失去表现。我的意思是现在我可以拥有比我需要的更多的线程(浪费资源),但我没有创建新线程的开销。
我有兴趣重构这种方式,不要浪费资源并保持相同的性能水平。我该如何整合执行者?或者我怎么能改善这个线程池?
0
A
回答
1
正常ThreadPoolExecutor应该就足够了。基本构造函数为“核心池大小”(最小线程总数保持活跃),最大大小(最大线程数量)和超额线程保持活动时间(空闲线程超过核心池大小)提供参数。此外,您可以直接将执行者的BlockingQueue传递给执行者。
0
尝试使用CachedThreadPool
,这将不仅回收,但在需要时创建新的线程..
2.而最真棒功能CachedThreadPool
是当线程在60秒内没有被激活,所以不会造成资源浪费。
0
您的用例已在ExecutorService.newCachedThreadPoolExecutor中实现。无论如何,我想继续执行你可以做各种事情来获得灵活的线程池。
我将列出一个这样的可能性
- 写一个主线程持有的队列和工作单位(任务)分配给各个线程,而且它保持它的线程运行,已经返回结果单位并阻止哪些线程。使用这些信息,您的主线程可以在需要时轻松地负载均衡和创建/销毁线程(从属)。
相关问题
- 1. 我该如何改善这个循环?
- 2. 更适合我的任务:后台工作者或线程池?
- 3. 我怎么能执行这个MySQL partitoning?
- 4. 我该怎么做才能改善我的测试?
- 5. 我该怎么做才能停止线程执行?
- 6. 我怎么能结合这些线路
- 7. 寻找方法来改善这个代码,或者如果有什么我不应该做的
- 8. 我应该如何改善这个C++代码的性能?
- 9. 我怎么能为了选择行或者
- 10. 执行者或与池构造
- 11. 我怎么能在Git中做分支或者什么东西
- 12. 我该如何使这个主要发现者并行工作
- 13. 我应该如何做这个动画或者我该如何解决这个困境?
- 14. 我怎么能改写这个2008
- 15. 工作者线程池
- 16. 我怎样才能改善这个存储过程的性能呢?
- 17. 我怎么能由流行线程laravel
- 18. 作为DSP编程初学者,我该怎么做?
- 19. Redis:我应该怎样(或者应该)删除pubsub频道
- 20. ASP.NET MVC 2路由不能正确解析(或者说,我应该怎么看)
- 21. 我该怎么办;如果var是整数然后执行
- 22. 开发一个互联网使者我应该怎么做?
- 23. 如何复制只有值不使用引用,或者我该怎么处理这个内部列表引用?
- 24. 我怎样才能缩短这个译者脚本?
- 25. 我应该在我的查询中执行方程式,或者在本地执行方程式并更新db
- 26. 我应该怎么做才能修复这个程序?
- 27. 我怎么能整合与angular.js
- 28. 我如何修改这个sql执行?
- 29. 我该怎么称呼这种行为?
- 30. 我怎样才能改善这种LinqToEntities GROUPBY查询
取决于OP在做什么,他可能需要对线程的最大数量设置限制 – assylias 2012-08-05 10:44:19
但是,我如何整合这个?在'CachedThreadPool'中,你提交'Runnables'吧?现在我有'线程'等待在队列中。我将如何从一个设计走向另一个? – Cratylus 2012-08-05 10:44:33
@ user384706:一个'Thread'实现'Runnable' – 2012-08-05 10:57:25