@Slf4j
public class MyThreadPoolExecutor {
public static Map<String,ThreadPoolExecutor> SYS_POOL_MAP = new ConcurrentHashMap<>();
public static synchronized ThreadPoolExecutor getNamedPoolExecutor(String name,int corePoolSize, int maximumPoolSize){
ThreadPoolExecutor executor = SYS_POOL_MAP.get(name);
if(executor== null){
executor = getPoolExecutor(corePoolSize,maximumPoolSize);
SYS_POOL_MAP.put(name,executor);
}
return executor;
}
private static ThreadPoolExecutor getPoolExecutor(int corePoolSize, int maximumPoolSize ){
long keepAliveTime = 600;
TimeUnit unit = TimeUnit.SECONDS;
BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(corePoolSize);
ThreadFactory threadFactory = new NameTreadFactory();
RejectedExecutionHandler handler = new MyIgnorePolicy();
ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit,
workQueue, threadFactory, handler);
executor.prestartAllCoreThreads(); // 预启动所有核心线程
log.info("pool executor has inited ");
return executor;
}
static class NameTreadFactory implements ThreadFactory {
private final AtomicInteger mThreadNum = new AtomicInteger(1);
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r, "my-thread-" + mThreadNum.getAndIncrement());
log.info(t.getName() + " has been created");
return t;
}
}
public static class MyIgnorePolicy implements RejectedExecutionHandler {
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
doLog(r, e);
}
private void doLog(Runnable r, ThreadPoolExecutor e) {
// 可做日志记录等
log.error( r.toString() + " rejected");
}
}
}
自定义线程池工具类
最新推荐文章于 2024-08-05 10:55:48 发布