Lựa chọn 1:
newWorkStealingPool từExecutors
public static ExecutorService newWorkStealingPool()
Tạo một nhóm luồng đánh cắp công việc bằng cách sử dụng tất cả các bộ xử lý có sẵn làm cấp độ song song mục tiêu của nó.
Với API này, bạn không cần phải chuyển số lõi cho ExecutorService
.
Triển khai API này từ mã xám
/**
* 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);
}
Lựa chọn 2:
newFixedThreadPool API từ Executors
hoặc other newXXX constructors
, trả vềExecutorService
public static ExecutorService newFixedThreadPool(int nThreads)
thay thế nThreads bằng Runtime.getRuntime().availableProcessors()
Tùy chọn 3:
ThreadPoolExecutor
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)
truyền Runtime.getRuntime().availableProcessors()
dưới dạng tham số cho maximumPoolSize
.