【发布时间】:2012-03-24 08:39:25
【问题描述】:
我正在用 Java 编写一个负载测试应用程序,并且有一个线程池可以针对被测服务器执行任务。因此,要制作 1000 个作业并在 5 个线程中运行它们,我会执行以下操作:
ExecutorService pool = Executors.newFixedThreadPool(5);
List<Runnable> jobs = makeJobs(1000);
for(Runnable job : jobs){
pool.execute(job);
}
但是我认为这种方法不会很好地扩展,因为我必须提前制作所有“工作”对象并将它们放在内存中,直到需要它们为止。
我正在寻找一种方法,让池中的线程在每次需要新工作时转到某种“JobFactory”类,并让工厂根据请求构建 Runnables,直到所需数量的工作完成被运行。工厂可能会开始返回 'null' 以向线程发出没有更多工作要做的信号。
我可以手动编写这样的代码,但它似乎是一个足够常见的用例,我想知道在美妙但复杂的“java.util.concurrent”包中是否有任何东西可以用来代替?
【问题讨论】:
标签: java multithreading lazy-loading threadpool java.util.concurrent