Opzione 1:
newWorkStealingPool daExecutors
public static ExecutorService newWorkStealingPool()
Crea un pool di thread che ruba il lavoro utilizzando tutti i processori disponibili come livello di parallelismo di destinazione.
Con questa API, non è necessario trasferire il numero di core a ExecutorService
.
Implementazione di questa API da grepcode
/**
* Creates a work-stealing thread pool using all
* {@link Runtime#availableProcessors available processors}
* as its target parallelism level.
* @return the newly created thread pool
* @see #newWorkStealingPool(int)
* @since 1.8
*/
public static ExecutorService newWorkStealingPool() {
return new ForkJoinPool
(Runtime.getRuntime().availableProcessors(),
ForkJoinPool.defaultForkJoinWorkerThreadFactory,
null, true);
}
Opzione 2:
newFixedThreadPool API da Executors
o other newXXX constructors
, che restituisceExecutorService
public static ExecutorService newFixedThreadPool(int nThreads)
sostituire nThreads con Runtime.getRuntime().availableProcessors()
Opzione 3:
ThreadPoolExecutor
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)
passa Runtime.getRuntime().availableProcessors()
come parametro a maximumPoolSize
.