首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java线程池超额订阅

Java线程池超额订阅
EN

Stack Overflow用户
提问于 2011-04-13 00:15:37
回答 2查看 382关注 0票数 5

我的CPU密集型操作主要是在线程池上运行的。然而,操作对外部事件有一定的等待时间,这些事件并不是在时间上均匀发生的。因为在Java中,据我所知,没有一个线程池实现可以根据观察到的任务吞吐量自动调整线程数量(就像在Microsoft的CLR 4中一样),那么是否至少有一种方法可以手动告诉线程池在阻塞操作开始时增加线程池的大小,而在阻塞操作结束时减少线程池的大小?

例如使用8核,池大小为8。如果操作是100% CPU限制,只需使用此固定池即可。如果有一些阻塞操作,应该可以这样做:

代码语言:javascript
复制
pool.increase();
waitForSpecialKeyPress();
pool.decrease();

这是如何在微软的C++异步库中实现的:Use Oversubscription to Offset Latency

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-13 00:37:01

Java7的ForkJoinPool有一个ManagedBlocker,它可以用来让池知道阻塞的线程,以便在必要时可以调度更多的线程。

编辑:我忘了提一下,这些类也可以作为jsr166y在Java6中使用。

票数 3
EN

Stack Overflow用户

发布于 2011-04-13 00:24:21

您可以扩展ThreadPoolExecutor以添加您自己的increase()decrease()函数,这两个函数执行简单的setMaximumPoolSize(getMaximumPoolSize() +/- 1)

确保同步这些方法,以确保您不会意外地弄乱池大小。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5638399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档