Java - 用于固定数量任务的ExecutorService

时间:2012-12-14 15:59:19

标签: java concurrency executorservice executor

我想使用Java中的ExecutorService来实现以下行为。我有大量的任务要完成,这些任务都可以并行完成。我想以下列方式从我的主线程中安排N个任务:

  • 如果活动任务的数量是< N =>安排新任务(执行者服务已经这样做了)
  • else,阻塞主线程,直到其中一个任务完成=>与在队列中存储N个第一个任务然后对第一个任务进行dequeing并在其上调用get()几乎相同)

有没有办法调整ExecutorService,如上所述?

2 个答案:

答案 0 :(得分:4)

使用由SynchronousQueue构造的N个线程的ThreadPoolExecutor。每次您向线程池提交任务时,主线程将被同步队列阻塞,直到来自池的线程从队列中获取任务。

答案 1 :(得分:0)

您可以将N个任务提交给ExecutorCompletionService,然后循环:

Future<?> f = executor.take(); //blocks until one task completes
executor.submit(nextTask());

通过这样做,您可以确保不再有N个任务同时在执行程序中排队。