Opção 1:
newWorkStealingPool deExecutors
public static ExecutorService newWorkStealingPool()
Cria um pool de threads de roubo de trabalho usando todos os processadores disponíveis como seu nível de paralelismo de destino.
Com esta API, você não precisa passar o número de núcleos para ExecutorService
.
Implementação desta API de 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);
}
Opção 2:
API newFixedThreadPool de Executors
ou other newXXX constructors
, que retornaExecutorService
public static ExecutorService newFixedThreadPool(int nThreads)
substituir nThreads por Runtime.getRuntime().availableProcessors()
Opção 3:
ThreadPoolExecutor
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)
passe Runtime.getRuntime().availableProcessors()
como parâmetro para maximumPoolSize
.