我想使用ExecutorService
Java 实现以下行为。我有大量任务要完成,这些任务都可以并行完成。我想通过以下方式从我的主线程中安排 N 个任务:
- 如果活动任务的数量是 < N => 调度新任务(执行器服务已经这样做了)
- 否则,在主线程上阻塞,直到其中一个任务完成 => 与将 N 个第一个任务存储在队列中然后将第一个任务出队并在其上调用 get() 几乎相同)
有没有办法像上面所说的那样调整 ExecutorService ?
我想使用ExecutorService
Java 实现以下行为。我有大量任务要完成,这些任务都可以并行完成。我想通过以下方式从我的主线程中安排 N 个任务:
有没有办法像上面所说的那样调整 ExecutorService ?
使用由 SynchronousQueue 构造的 N 个线程的 ThreadPoolExecutor。每次将任务提交到线程池时,主线程都会被同步队列阻塞,直到池中的线程从队列中取出任务。
您可以将 N 个任务提交给 ExecutorCompletionService,然后在循环中:
Future<?> f = executor.take(); //blocks until one task completes
executor.submit(nextTask());
通过这样做,您可以确保不再有 N 个任务同时在执行程序中排队。