Maison  >  Article  >  Java  >  Exemple d'analyse de code d'appels simultanés de ThreadPoolExecutor en Java

Exemple d'analyse de code d'appels simultanés de ThreadPoolExecutor en Java

黄舟
黄舟original
2017-05-28 09:11:132025parcourir

Cet article présente principalement les informations pertinentes sur l'explication détaillée de l'instance d'appel simultané de Java ThreadPoolExecutor. Les amis qui en ont besoin peuvent se référer à

Explication détaillée de l'instance d'appel simultané de Java ThreadPoolExecutor<.>

Aperçu

Habituellement, afin d'améliorer la vitesse de traitement des tâches, certains modèles de concurrence

sont utilisés. >Tout dans ThreadPoolExecutor est un .

Le code

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

      tasks.add(task);
    }

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

    System.out.println(finalResults);
  }
}
peut créer une tâche appelable pour les tâches qui doivent être exécutées et utiliser les threads du pool de threads pour exécuter ces tâches simultanément, améliorant ainsi l'efficacité de l'exécution des tâches.
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<Runnable>(QUEUE_SIZE), new ThreadPoolExecutor.AbortPolicy());

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn