Exécuteurs propose trois façons de créer un pool de threads classique
ExecutorService ThreadPool = Executors.newFixedThreadPool (int)
ExecutorService ThreadPool = Executors.newSingleThreadPool ()
ExecutorService ThreadPool = Executors.newCachedThreadPool (int)
Nous utilisons qu'à la fin que l'on faire au travail?
La réponse est que nous ne pouvons être utilisés dans la production de la coutume
Selon la figure, nous pouvons trouver qu'ils doivent utiliser la mise en œuvre sous-jacente est ThreadPoolExecutor, mais le cinquième paramètre à utiliser une valeur par défaut de la file d'attente de blocage est Integer.MAX_VALUE, qui est,
2147483647, cela équivaut à une file d'attente limite. Toutes les demandes sont bourrées à l'intérieur, causant éventuellement OOM.
La norme de codage peut également être vu Ali
description paramètre
Sous - jacente mise en oeuvre du pool de threads sept paramètres
1.corePoolSize: nombre de base permanente de threads dans le pool de threads
2.maximumPoolSize: pool de threads peut accueillir le nombre maximum de threads d'exécution, cette valeur doit être supérieure ou égale à 1.
3.keepAliveTime: excès de threads inactifs le temps de survie
4.unit: unités KeepAliveTime
5.workQueue: file d' attente des tâches, mais la tâche n'a pas encore été soumis à exécuter.
6.threadFactory: représente l'usine de thread de production de fil de génération de fil de piscine utilisée pour créer un fil pour une utilisation générale par défaut
7.handler: refuser politique, signifie que lorsque la file d' attente est pleine et les threads de travail supérieur ou égal au nombre maximum de threads dans le pool de threads
travaux
Le pool de threads principe sous - jacent de
base des fils de base, lorsque le nombre de fils est supérieur à corePoolSize, le fil en excès sera transféré à bloquer la file d' attente, la file d' attente après le blocage était plein
d'expansion de capacité à plusieurs maximumPoolSize. deny prendra après maximumPoolSize était plein.
Quand un petit nombre de fils après, en fonction du réglage de threads inactifs le temps de survie de fil de la capacité totale de se rétracter corePoolSize
fait manuellement
* pool de threads de démonstration
* @author t
* travail réel sur l'utilisation du multi-threading est le pool de threads création de fil ne sera pas affiché
* en utilisant des méthodes traditionnelles pour créer une manière susceptible de causer le pool de threads OOM
* /
public class ThreadPoolDemo {
2,
5,.
1,.
TimeUnit.SECONDS,
nouvelle nouvelle LinkedBlockingDeque avec <> (3),.
Executors.defaultThreadFactory (),
nouvelle nouvelle ThreadPoolExecutor.AbortPolicy ());
l'try {
for (int i = 1;. I <= 10; i ++) {
final NUM = int I;
threadPool.execute (() -> {
// nom fil d'impression
// pause pour un fil
System.out.println ( "ID" + num + "" + Thread.currentThread ( ) .getName () + "\ t effectuer des transactions commerciales");
});
}
} Catch (Exception e) {
e.printStackTrace ();
} {enfin
threadPool.shutdown ();
}
}
}
Les résultats d'exploitation
Note: Les résultats d'exploitation de configuration basée sur des machines différentes sont différentes, aurait dû être plus que le nombre maximum fil (maximumPoolSize + taille de la file d'attente) déclenchera la politique de rejet, mais parce que la vitesse de traitement de la machine
Au cours nous pouvons gérer, donc il n'y a pas d'erreur.
Faire passer une pause de 1 seconde, les résultats de neuf fils
Auteur: ushowtime
Adresse originale: https://www.ushowtime.cn/blog/p/50