Option 1:
nouveauWorkStealingPool deExecutors
public static ExecutorService newWorkStealingPool()
Crée un pool de threads volants en utilisant tous les processeurs disponibles comme niveau de parallélisme cible.
Avec cette API, vous n'avez pas besoin de transmettre le nombre de cœurs à ExecutorService
.
Implémentation de cette API depuis 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);
}
Option 2:
API newFixedThreadPool de Executors
ou other newXXX constructors
, qui renvoieExecutorService
public static ExecutorService newFixedThreadPool(int nThreads)
remplacer nThreads par Runtime.getRuntime().availableProcessors()
Option 3:
ThreadPoolExecutor
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)
passer Runtime.getRuntime().availableProcessors()
en paramètre à maximumPoolSize
.