JAva ThreadPoolExecutor同時呼び出しインスタンスの詳細

2340 ワード

JAva ThreadPoolExecutor同時呼び出しインスタンスの詳細
概要
通常、タスクの処理速度を提供するために、いくつかの同時モデルが使用されます.ThreadPoolExecutorのinvokeAllは1つです.
コード#コード#

package test.current;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class TestCallable {

  public static void main(String[] args) throws InterruptedException, ExecutionException {

    List>> tasks = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
      Callable> task = new Callable>() {
        @Override
        public List call() throws Exception {
          return Arrays.asList(1L,2L);
        }
      };

      tasks.add(task);
    }

    List finalResults = new ArrayList<>(10);
    List>> results = ThreadPool.getThreadPool().invokeAll(tasks);
    for(Future> ele : results) {
      List list = ele.get();
      finalResults.addAll(list);
    }

    System.out.println(finalResults);
  }
}


package test.current;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadPool {
  private static final int CORE_SIZE = 8;

  private static final int MAX_SIZE = 12;

  private static final long KEEP_ALIVE_TIME = 30;

  private static final int QUEUE_SIZE = 50000;

  private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(CORE_SIZE, MAX_SIZE, KEEP_ALIVE_TIME,
      TimeUnit.SECONDS, new ArrayBlockingQueue(QUEUE_SIZE), new ThreadPoolExecutor.AbortPolicy());

  public static ThreadPoolExecutor getThreadPool() {
    return threadPool;
  }
}


実行するタスクをCallable taskを作成し、スレッドプール内のスレッドを使用してこれらのtaskを同時に実行することで、タスクの実行効率を向上させることができます.
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!