Testamentsvollstrecker # newFixedThreadPool:Warum unterschiedliche Queue beim Erstellen von FixedThreadPool und CachedThreadPool verwenden?
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
Testamentsvollstrecker # newCachedThreadPool:
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
Warum die beiden Thread verschiedene Queue verwenden? Ich habe Java Doc über LinkedBlockingQueue und SynchronousQueue nachgeschlagen, aber ich weiß immer noch nicht, warum sie hier verwendet werden, Ist die Leistung in Betracht ziehen oder andere?
Ist es ein Duplikat? Es stellt sich nicht die gleiche Frage. Die Antwort kann etwas gemeinsam haben, aber es ist eine andere Frage. –
Grund von verwandter SE-Frage: SynchronousQueue ist eine ganz besondere Art von Warteschlange - sie implementiert einen Rendezvous-Ansatz (Produzent wartet, bis der Konsument bereit ist, der Konsument wartet, bis der Produzent bereit ist) hinter der Schnittstelle von Queue. –