Opción 1:
newWorkStealingPool deExecutors
public static ExecutorService newWorkStealingPool()
Crea un grupo de subprocesos de robo de trabajo utilizando todos los procesadores disponibles como su nivel de paralelismo de destino.
Con esta API, no necesita pasar un número de núcleos a ExecutorService
.
Implementación de esta API desde 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);
}
Opcion 2:
newFixedThreadPool API de Executors
o other newXXX constructors
, que devuelveExecutorService
public static ExecutorService newFixedThreadPool(int nThreads)
reemplace nThreads con Runtime.getRuntime().availableProcessors()
Opcion 3:
ThreadPoolExecutor
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)
pasar Runtime.getRuntime().availableProcessors()
como parámetro a maximumPoolSize
.