Pool de threads personnalisé pour les flux parallèles Java 8
Le flux parallèle de Java 8 offre un moyen pratique de paralléliser les opérations et d'améliorer les performances. Cependant, dans certains scénarios, il peut être souhaitable d'utiliser un pool de threads personnalisé pour contrôler l'allocation des threads et compartimenter différentes tâches au sein d'une application.
Les flux parallèles peuvent-ils utiliser un pool de threads personnalisé ?
Au départ, il n'existait aucun moyen explicite d'attribuer un pool de threads personnalisé à un flux parallèle. Cela pourrait poser des problèmes lorsqu'il s'agit d'applications comportant plusieurs modules et la nécessité d'empêcher des tâches lentes de bloquer d'autres.
L'astuce Fork-Join Pool
Cependant, il existe une solution de contournement à l'aide de l'API Fork-Join Pool. En soumettant une tâche parallèle dans un pool de jointure fork distinct, il est possible de l'isoler du pool commun utilisé par les opérations de flux. Voici un exemple :
final int parallelism = 4; ForkJoinPool forkJoinPool = null; try { forkJoinPool = new ForkJoinPool(parallelism); final List<Integer> primes = forkJoinPool.submit(() -> { // Parallel task here, for example IntStream.range(1, 1_000_000).parallel() .filter(PrimesPrint::isPrime) .boxed().collect(Collectors.toList()) }).get(); System.out.println(primes); } catch (InterruptedException | ExecutionException e) { throw new RuntimeException(e); } finally { if (forkJoinPool != null) { forkJoinPool.shutdown(); } }
Ce code crée un pool de jointure fork dédié avec un parallélisme spécifié et lui soumet l'exécution de tâches parallèles. Cela permet aux tâches spécifiées de fonctionner au sein de leur propre pool de threads, les séparant du pool commun.
Conclusion
La solution de contournement utilisant un pool de jointure fork fournit un moyen pour utiliser un pool de threads personnalisé pour les flux parallèles dans Java 8. Il permet un contrôle plus fin sur l'allocation et la compartimentation des threads, permettant l'exécution parallèle de tâches sans blocage entre modules.
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!