Cet article présente principalement des informations pertinentes pour une compréhension approfondie des paramètres de Java ThreadPoolExecutor. Les amis qui en ont besoin peuvent se référer à
Compréhension approfondie des paramètres de Java ThreadPoolExecutor.
1. Utilisez les exécuteurs pour créer un pool de threads. Bien sûr, les exécuteurs utilisent également différents paramètres pour new ThreadPoolExecutor
1. newFixedThreadPool()
Créez un pool de threads avec un nombre fixe de threads. Puisque LinkedBlockingQueue est utilisé, maximumPoolSize est inutile Lorsque corePoolSize est plein, il est ajouté à LinkedBlockingQueuequeue. Chaque fois qu'un thread termine son exécution, prenez-en un dans la file d'attente LinkedBlockingQueue. Cela crée donc un pool de threads de taille fixe.
public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); } public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), defaultHandler); }
3.newCachedThreadPool()
public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>())); }
2. Utilisez ThreadPoolExecutor pour créer un pool de threads
public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); } public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), defaultHandler); }
de ThreadPoolExecutor
Paramètres : 1. corePoolSize Le nombre de threads principaux. Lorsque le nombre de threads Séquence d'exécution de la tâche : 2. Lorsque le nombre de threads est supérieur ou égal à corePoolSize et que la workQueue n'est pas pleine, mettez-la dans la workQueue ThreadPoolExecutor a quatre politiques de rejet par défaut : lève une exception RejectedExecutionException 3. ThreadPoolExecutor.DiscardPolicy() Supprimer directement les tâches suivantes hériter de 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! public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
if (corePoolSize < 0 ||
maximumPoolSize <= 0 ||
maximumPoolSize < corePoolSize ||
keepAliveTime < 0)
throw new IllegalArgumentException();
if (workQueue == null || threadFactory == null || handler == null)
throw new NullPointerException();
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.workQueue = workQueue;
this.keepAliveTime = unit.toNanos(keepAliveTime);
this.threadFactory = threadFactory;
this.handler = handler;
}