ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
//核心数 当前cpu核心数+1
Runtime.getRuntime().availableProcessors() + 1,
//最大核心数 当前cpu核心数+1
Runtime.getRuntime().availableProcessors() + 1,
//时间60
60L,
//单位 秒
TimeUnit.SECONDS,
//阻塞对列数 1
new LinkedBlockingDeque<>(1),
//默认工厂
Executors.defaultThreadFactory(),
//放弃策略 哪来的回哪去
new ThreadPoolExecutor.CallerRunsPolicy()
);
public class FileHandleExecutorConfig {
/**
* 设置线程池信息
*/
public static final ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(2, 4,
200,
TimeUnit.MILLISECONDS,
new LinkedBlockingDeque<>(50),
new ThreadPoolExecutor.AbortPolicy());
private FileHandleExecutorConfig() {
}
}
//调用
FileHandleExecutorConfig.EXECUTOR.execute(() -> {
try {
obsClient.putObject(bucket, objectKey, stream);
//通过回调函数更新数据状态
updateDataByCallBack(obsUploadParam.getCacheCode(), uploadToObsCallBackService, "2");
} catch (Exception e) {
log.error("文件上传obs失败,原因:{}", e.getMessage());
//通过回调函数更新数据状态
updateDataByCallBack(obsUploadParam.getCacheCode(), uploadToObsCallBackService, "3");
}
});
构造函数的参数含义如下:
corePoolSize:指定了线程池中的线程数量,它的数量决定了添加的任务是开辟新的线程去执行,还是放到workQueue任务队列中去;
maximumPoolSize:指定了线程池中的最大线程数量,这个参数会根据你使用的workQueue任务队列的类型,决定线程池会开辟的最大线程数量;
keepAliveTime:当线程池中空闲线程数量超过corePoolSize时,多余的线程会在多长时间内被销毁;
unit:keepAliveTime的单位
workQueue:任务队列,被添加到线程池中,但尚未被执行的任务;它一般分为直接提交队列、有界任务队列、无界任务队列、优先任务队列几种;
threadFactory:线程工厂,用于创建线程,一般用默认即可;
handler:拒绝策略;当任务太多来不及处理时,如何拒绝任务;
推荐更为详细的文章:
https://www.cnblogs.com/dafanjoy/p/9729358.html