【发布时间】:2017-03-06 12:30:12
【问题描述】:
我有使用固定线程池的服务,因为超过 10 个这个繁重任务的实例对我的服务器来说太多了。
ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(10);
我使用它是这样的:
Runnable command = new Runnable() {
@Override
public void run() {
MyHeavyClassWithCache myHeavyClassWithCache=new MyHeavyClassWithCache();
}
};
Future<ScreenImage> feature = executor.submit(command,myHeavyClassWithCacheResult);
现在我只需要 n (10) 个 MyHeavyClassWithCache 类的实例。并且还需要在执行器中以某种方式重用它(比我现在创建它要快得多)。 我如何使用 ExecutorService 来管理这种事情。 目标是通过使用我的 10 个 MyHeavyClassWithCache 类实例之一来实现最多 10 个线程同时工作(永远不会有两个线程同时具有相同的实例!)
我希望这足够普遍,存在一些 java 设计模式来实现这一点。
【问题讨论】:
-
您正在寻找的是一个对象池。可以使用commons-pool来实现http://commons.apache.org/proper/commons-pool/
-
是的,这就是我需要的。我实现了它,到目前为止效果很好。在此处写下您的评论作为答案。非常感谢!
标签: java multithreading executorservice