Pilihan 1:
newWorkStealingPool dariExecutors
public static ExecutorService newWorkStealingPool()
Membuat kumpulan utas yang mencuri pekerjaan menggunakan semua prosesor yang tersedia sebagai tingkat paralelisme targetnya.
Dengan API ini, Anda tidak perlu meneruskan jumlah inti ke ExecutorService
.
Implementasi API ini dari 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);
}
Pilihan 2:
newFixedThreadPool API dari Executors
atau other newXXX constructors
, yang mengembalikanExecutorService
public static ExecutorService newFixedThreadPool(int nThreads)
ganti nThreads dengan Runtime.getRuntime().availableProcessors()
Opsi 3:
ThreadPoolExecutor
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)
lulus Runtime.getRuntime().availableProcessors()
sebagai parameter ke maximumPoolSize
.