Les quatre façons dont Java crée un pool de threads sont : 1. newCachedThreadPool crée un pool de threads pouvant être mis en cache ; 2. newFixedThreadPool crée un pool de threads de longueur fixe ; 3. newScheduledThreadPool crée un pool de threads de longueur fixe ;
Java fournit quatre pools de threads via les exécuteurs, qui sont :
newCachedThreadPool crée un pool de threads pouvant être mis en cache. Si la longueur du pool de threads dépasse les besoins de traitement, il peut le faire. Recyclez de manière flexible les threads inactifs. S'il n'existe aucun moyen de recycler les threads inactifs, créez de nouveaux threads.
newFixedThreadPool crée un pool de threads de longueur fixe, qui peut contrôler le nombre maximum de threads simultanés qui attendront dans la file d'attente.
newScheduledThreadPool crée un pool de threads de longueur fixe qui prend en charge l'exécution de tâches planifiées et périodiques.
newSingleThreadExecutor crée un pool de threads à thread unique, qui utilisera uniquement un thread de travail unique pour exécuter les tâches, garantissant que toutes les tâches sont exécutées dans l'ordre spécifié (FIFO, LIFO, priorité).
Pour plus de détails, veuillez vous référer au blog du blogueur Java Concurrent Programming : Utilisation du pool de threads
1.newCachedThreadPool Le pool de threads ici est infini Lorsqu'un thread termine sa tâche, ce thread peut. Terminez ensuite la tâche qui vous sera assignée au lieu de créer un nouveau fil de discussion.
public static void main(String[] args) { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); for (int i = 0; i < 10; i++) { final int index = i; try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } cachedThreadPool.execute(new Runnable() { public void run() { System.out.println(index); } }); } }
2.newFixedThreadPool
public static void main(String[] args) { ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3); for (int i = 0; i < 10; i++) { final int index = i; fixedThreadPool.execute(new Runnable() { public void run() { try { System.out.println(index); Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } }); } }
3.newScheduledThreadPoo
public static void main(String[] args) { ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5); for (int i = 0; i < 10; i++) { scheduledThreadPool.schedule(new Runnable() { public void run() { System.out.println("delay 3 seconds"); } }, 3, TimeUnit.SECONDS); } }
4.newSingleThreadExecutor exécute les tâches de thread dans l'ordre Mais contrairement à un seul thread, ce pool de threads ne peut exister que dans un seul thread , après la mort de ce fil, un autre fil remplira
public static void main(String[] args) { ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(); for (int i = 0; i < 10; i++) { final int index = i; singleThreadExecutor.execute(new Runnable() { public void run() { /* System.out.println(index);*/ try { System.out.println(index); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }); } }
Tutoriel recommandé : "tutoriel Java"
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!