|
|
|
@ -8,6 +8,7 @@ import java.util.concurrent.TimeUnit; |
|
|
|
|
|
|
|
/** |
|
|
|
* 创建单例线程池 |
|
|
|
* |
|
|
|
* @author Andrews |
|
|
|
* @date 2023/11/30 11:12 |
|
|
|
*/ |
|
|
|
@ -19,7 +20,8 @@ public final class ThreadPoolExecutorFactory { |
|
|
|
* CPU 密集型:核心线程数 = CPU核数 + 1 |
|
|
|
* IO 密集型:核心线程数 = CPU核数 * 2 |
|
|
|
*/ |
|
|
|
private static final int CORE_POOL_SIZE = Runtime.getRuntime().availableProcessors() * 2; |
|
|
|
private static final int CORE_POOL_SIZE = |
|
|
|
Math.min(ThreadPoolExecutorFactory.MAX_IMUM_POOL_SIZE, Runtime.getRuntime().availableProcessors() * 2); |
|
|
|
/** |
|
|
|
* maximumPoolSize - 池中允许的最大线程数(采用LinkedBlockingQueue时没有作用)。 |
|
|
|
*/ |
|
|
|
@ -63,19 +65,18 @@ public final class ThreadPoolExecutorFactory { |
|
|
|
synchronized (ThreadPoolExecutorFactory.class) { |
|
|
|
if (null == threadPoolExecutor) { |
|
|
|
threadPoolExecutor = new ThreadPoolExecutor( |
|
|
|
//核心线程数
|
|
|
|
CORE_POOL_SIZE, |
|
|
|
//最大线程数,包含临时线程
|
|
|
|
MAX_IMUM_POOL_SIZE, |
|
|
|
//临时线程的存活时间
|
|
|
|
KEEP_ALIVE_TIME, |
|
|
|
//时间单位(毫秒)
|
|
|
|
TimeUnit.MILLISECONDS, |
|
|
|
//等待队列
|
|
|
|
new LinkedBlockingQueue<>(QUEUE_SIZE), |
|
|
|
//拒绝策略
|
|
|
|
new ThreadPoolExecutor.CallerRunsPolicy() |
|
|
|
); |
|
|
|
//核心线程数
|
|
|
|
CORE_POOL_SIZE, |
|
|
|
//最大线程数,包含临时线程
|
|
|
|
MAX_IMUM_POOL_SIZE, |
|
|
|
//临时线程的存活时间
|
|
|
|
KEEP_ALIVE_TIME, |
|
|
|
//时间单位(毫秒)
|
|
|
|
TimeUnit.MILLISECONDS, |
|
|
|
//等待队列
|
|
|
|
new LinkedBlockingQueue<>(QUEUE_SIZE), |
|
|
|
//拒绝策略
|
|
|
|
new ThreadPoolExecutor.CallerRunsPolicy()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|