我们正在开发一个 n-tire 系统,其中有 +10 个模块可用,每个模块都完成特定的工作。
每个模块都有自己的线程池和线程管理器。
整个系统运行在JBoss AS上,部分模块使用原生代码(pthread
for native guys)
一切看起来都很完美,除了我们最近发现其中一个模块在特定时间(高峰时间)工作非常慢,原因是因为该模块有很多工作,我也检查并实现了整个线程相关模块线程池正常工作。
但是当一个模块正在努力工作时,另一个模块有点空闲,或者不是很忙。
问题:
有没有可能把线程池a
的线程借到线程池b
,辛苦了之后还回来?!我用 ExecutorService
做了很多工作,但没有帮助,或者至少我不明白该怎么做。
请帮忙,谢谢。
最佳答案
线程数量与工作负载分配关系不大。
如果其中一个模块是瓶颈,并且您的机器已经饱和,您必须实现自己的机制,以确保该模块在给定时间使用最多的资源。
一个简单的方法是监控关键模块中等待处理的数据量,如果超过某个阈值则暂停其他模块的工作。
另一种方法是为所有数据实现一个优先级队列,其中根据数据的类型和它已经在队列中等待的时间来确定数据的优先级。
关于java - 线程池通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19634480/