小编Vic*_* P.的帖子

如何实现ExecutorService来执行批量任务

我正在寻找一种在java中执行批量任务的方法.我的想法是ExecutorService基于一个线程池,它允许我Callable从一个main线程中传播一组不同的线程.此类应提供waitForCompletion方法,该方法将使main线程处于休眠状态,直到执行所有任务.然后main应该唤醒线程,它将执行一些操作并重新提交一组任务.

这个过程将重复多次,所以我想使用,ExecutorService.shutdown因为这需要创建多个实例ExecutorService.

目前我使用a AtomicIntegerLock/ 来以下列方式实现它Condition:

public class BatchThreadPoolExecutor extends ThreadPoolExecutor {
  private final AtomicInteger mActiveCount;
  private final Lock          mLock;
  private final Condition     mCondition;

  public <C extends Callable<V>, V> Map<C, Future<V>> submitBatch(Collection<C> batch){
    ...
    for(C task : batch){
      submit(task);
      mActiveCount.incrementAndGet();
    }
  }

  @Override
  protected void afterExecute(Runnable r, Throwable t) {
    super.afterExecute(r, t);
    mLock.lock();
    if (mActiveCount.decrementAndGet() == 0) {
      mCondition.signalAll();
    } …
Run Code Online (Sandbox Code Playgroud)

java multithreading executorservice

5
推荐指数
1
解决办法
8815
查看次数

标签 统计

executorservice ×1

java ×1

multithreading ×1