2017-07-06 4 views
2

Ich muss Unit-Test einige Funktionalität, die über Threads funktioniert, für die ich sicherstellen muss, dass zwei Jobs auf verschiedenen Threads ausgeführt werden.Gibt es einen ExecutorService, der für jede Aufgabe einen neuen Thread erstellt?

Die Verwendung von Executors.newCachedThreadPool() führt zu einer Race-Bedingung, da der Test den zwischengespeicherten Thread-Pool verwenden kann oder nicht.

Gibt es eine ExecutorService, die immer einen neuen Thread verwendet?

Antwort

5

Verwenden Sie ein java.util.concurrent.ThreadPoolExecutor mit einem corePoolSize von 0 und einem keepAliveTime von 0. Dadurch werden neue Aufgaben einen neuen Thread erzeugen und Threads werden unmittelbar nach dem Beenden von Aufgaben beendet.

Zum Beispiel:

final ExecutorService executorService = new ThreadPoolExecutor(
    0, 2, 0, TimeUnit.SECONDS, new SynchronousQueue<>()); 

executorService.submit(task1); 
executorService.submit(task2); 
Verwandte Themen