parent
66f151ccb8
commit
c2138f379c
@ -0,0 +1,101 @@
|
|||||||
|
package org.opsli.common.thread;
|
||||||
|
|
||||||
|
|
||||||
|
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||||
|
|
||||||
|
import java.util.concurrent.LinkedBlockingDeque;
|
||||||
|
import java.util.concurrent.RejectedExecutionHandler;
|
||||||
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 线程池工厂
|
||||||
|
*
|
||||||
|
* @author Parker
|
||||||
|
* @date 2021/11/2 10:48
|
||||||
|
*/
|
||||||
|
public final class ThreadPoolFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认最大并发数<br>
|
||||||
|
*/
|
||||||
|
private static final int DEFAULT_MAX_CONCURRENT = Runtime.getRuntime().availableProcessors() * 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认线程存活时间
|
||||||
|
*/
|
||||||
|
private static final long DEFAULT_KEEP_ALIVE = 60L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认队列大小
|
||||||
|
*/
|
||||||
|
private static final int DEFAULT_SIZE = 1024;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 线程池名称格式
|
||||||
|
*/
|
||||||
|
private static final String DEFAULT_THREAD_POOL_NAME = "ProcessPool-{}-%d";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建默认的线程池
|
||||||
|
* @return ThreadPoolExecutor
|
||||||
|
*/
|
||||||
|
public static ThreadPoolExecutor createDefThreadPool(){
|
||||||
|
return createInitThreadPool(DEFAULT_MAX_CONCURRENT, DEFAULT_MAX_CONCURRENT * 4, DEFAULT_KEEP_ALIVE,
|
||||||
|
TimeUnit.SECONDS, DEFAULT_SIZE, DEFAULT_THREAD_POOL_NAME, new ThreadPoolExecutor.CallerRunsPolicy());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建默认的线程池
|
||||||
|
*
|
||||||
|
* @param poolName 线程池名称
|
||||||
|
* @return ThreadPoolExecutor
|
||||||
|
*/
|
||||||
|
public static ThreadPoolExecutor createDefThreadPool(String poolName){
|
||||||
|
return createInitThreadPool(DEFAULT_MAX_CONCURRENT, DEFAULT_MAX_CONCURRENT * 4, DEFAULT_KEEP_ALIVE,
|
||||||
|
TimeUnit.SECONDS, DEFAULT_SIZE, poolName, new ThreadPoolExecutor.CallerRunsPolicy());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建默认的线程池
|
||||||
|
*
|
||||||
|
* @param maxConcurrent 最大线程数
|
||||||
|
* @param poolName 线程池名称
|
||||||
|
* @return ThreadPoolExecutor
|
||||||
|
*/
|
||||||
|
public static ThreadPoolExecutor createDefThreadPool(int maxConcurrent, String poolName){
|
||||||
|
return createInitThreadPool(maxConcurrent, maxConcurrent * 4, DEFAULT_KEEP_ALIVE,
|
||||||
|
TimeUnit.SECONDS, DEFAULT_SIZE, poolName, new ThreadPoolExecutor.CallerRunsPolicy());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建线程池
|
||||||
|
* @param coreConcurrent 核心线程数
|
||||||
|
* @param maxConcurrent 最大线程数
|
||||||
|
* @param keepAlive 线程存活时效
|
||||||
|
* @param timeUnit 线程存活单位
|
||||||
|
* @param queueSize 队列大小
|
||||||
|
* @param poolName 线程池名称
|
||||||
|
* @param handler 拒绝处理策略
|
||||||
|
* @return ThreadPoolExecutor
|
||||||
|
*/
|
||||||
|
public static ThreadPoolExecutor createInitThreadPool(final int coreConcurrent,
|
||||||
|
final int maxConcurrent,
|
||||||
|
final long keepAlive,
|
||||||
|
final TimeUnit timeUnit,
|
||||||
|
final int queueSize,
|
||||||
|
final String poolName,
|
||||||
|
final RejectedExecutionHandler handler
|
||||||
|
){
|
||||||
|
return new ThreadPoolExecutor(coreConcurrent, maxConcurrent, keepAlive, timeUnit,
|
||||||
|
new LinkedBlockingDeque<>(queueSize),
|
||||||
|
new ThreadFactoryBuilder().setNameFormat(poolName).build(),
|
||||||
|
handler
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ThreadPoolFactory(){}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in new issue