线程池管理工具类
public class ThreadManager {
/**
* 通过ThreadPoolExecutor的代理类来对线程池的管理
*/
public static class ThreadPoolProxy {
/**
* 线程池执行者 ,java内部通过该api实现对线程池管理
*/
private ThreadPoolExecutor poolExecutor;
private Integer corePoolSize;
private Integer maximumPoolSize;
private Long keepAliveTime;
private Integer boundedQueueSize;
public ThreadPoolProxy(Integer corePoolSize,
Integer maximumPoolSize,
Long keepAliveTime,
Integer boundedQueueSize) {
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.keepAliveTime = keepAliveTime;
this.boundedQueueSize = boundedQueueSize;
}
/**
* 异步执行方法,
* 队列排满且超过maximumPoolSize时候抛出RejectedExecutionException异常
*
* @param r 待执行方法
*/
public void execute(Runnable r) {
if (null == this.poolExecutor || this.poolExecutor.isShutdown()) {
this.poolExecutor = new ThreadPoolExecutor(
this.corePoolSize,
this.maximumPoolSize,
this.keepAliveTime,
TimeUnit.MILLISECONDS,
new LinkedBlockingDeque<>(this.boundedQueueSize),
Executors.defaultThreadFactory()
);
}
// 执行线程
this.poolExecutor.execute(r);
}
}
/**
* 主线程池,核心业务使用
*/
private volatile static ThreadPoolProxy primaryThreadPoolProxy;
/**
* 次要线程池,辅助业务使用
*/
private volatile static ThreadPoolProxy secondaryThreadPoolProxy;
/**
* 主线程业务
*
* @return 核心线程池对象
*/
public static ThreadPoolProxy primaryThreadPoolProxy() {
if (null != primaryThreadPoolProxy) {
return primaryThreadPoolProxy;
}
synchronized (ThreadPoolProxy.class) {
if (null == primaryThreadPoolProxy) {
Integer corePoolSize = 10;
Integer maximumPoolSize = 80;
Long keepAliveTime = 30000L;
Integer boundedQueueSize = 3;
primaryThreadPoolProxy = new ThreadPoolProxy(corePoolSize,
maximumPoolSize,
keepAliveTime,
boundedQueueSize);
}
}
return primaryThreadPoolProxy;
}
/**
* 次要线程池对象
*
* @return 次要线程池对象
*/
public static ThreadPoolProxy secondaryThreadPoolProxy() {
if (null != secondaryThreadPoolProxy) {
return secondaryThreadPoolProxy;
}
synchronized (ThreadPoolProxy.class) {
if (null == secondaryThreadPoolProxy) {
Integer corePoolSize = 10;
Integer maximumPoolSize = 50;
Long keepAliveTime = 30000L;
Integer boundedQueueSize = 8;
secondaryThreadPoolProxy = new ThreadPoolProxy(corePoolSize,
maximumPoolSize,
keepAliveTime,
boundedQueueSize);
}
}
return secondaryThreadPoolProxy;
}
}异步请求
public void sendHtmlMail(){
ThreadManager.secondaryThreadPoolProxy().execute(()-> {
要执行的方法代码
});
}


京公网安备 11010502036488号