Utiliser le fil de discussion actuel pour ExecutorService : une approche polyvalente
Dans les scénarios où l'exploitation du multithreading n'est pas souhaitable, cela peut être bénéfique pour employer un ExecutorService qui fonctionne dans le contexte du thread actuel. Cette approche permet une transition transparente entre les pools de threads et le thread actuel, garantissant des modifications minimales du code.
Comprendre le besoin
Lors de la configuration d'un ExecutorService, les développeurs sont souvent confrontés au dilemme de choisir entre un pool de threads et le thread actuel. Les pools de threads offrent des performances et une évolutivité améliorées, tandis que le thread actuel simplifie l'exécution. Équilibrer ces exigences nécessite une solution flexible.
Personnalisation de l'ExecutorService
Pour réaliser cette personnalisation, on peut envisager l'approche suivante :
<code class="java">ExecutorService es = threads == 0 ? new CurrentThreadExecutor() : Executors.newThreadPoolExecutor(threads); // Utilize es.execute / es.submit / new ExecutorCompletionService(es) as usual</code>
Dans cette implémentation, la classe CurrentThreadExecutor agit comme un espace réservé pour l'utilisation du thread actuel. Lorsque les threads sont définis sur 0, CurrentThreadExecutor est utilisé, exécutant efficacement des tâches dans le thread actuel. En revanche, si les threads sont différents de zéro, un pool de threads standard est créé.
Simplification de Java 8
Pour une approche plus concise dans Java 8, le le code suivant peut être utilisé :
<code class="java">Executor e = Runnable::run;</code>
Cette expression attribue directement la méthode Runnable::run comme exécuteur, garantissant que les tâches sont exécutées dans le thread actuel.
En adoptant cette approche, les développeurs bénéficient de la flexibilité nécessaire pour configurer ExecutorService en fonction de leurs besoins sans modifier de manière significative leur code. Il fournit une solution polyvalente qui s'adresse à la fois à la parallélisation et à l'exécution monothread.
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!