Esecutori # newFixedThreadPool:Perché utilizzare una coda diversa durante la creazione di FixedThreadPool e CachedThreadPool?
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
Esecutori # newCachedThreadPool:
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
Perché i due ThreadPool usano coda diversa? Ho cercato java doc su LinkedBlockingQueue e SynchronousQueue, ma ancora non so perché vengono utilizzati qui, sono le prestazioni in considerazione o altri?
È un duplicato? Non fa la stessa domanda. La risposta può avere qualcosa in comune, ma è una domanda diversa. –
Motivo dalla relativa domanda SE: SynchronousQueue è un tipo molto speciale di coda: implementa un approccio di rendez-vous (il produttore attende fino a quando il consumatore è pronto, il consumatore attende che il produttore sia pronto) dietro l'interfaccia di Queue. –