package com.vivo.finance.vivopay.core.utils;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
-
@author liusenxiao
-
@description 单列线程池异步任务处理器
-
@data2019/12/11
*/
public class ThreadPoolServiceUtil {
// 核心线程数
private static final int DEFAULT_CORE_SIZE=10;
// 最大线程数
private static final int MAX_QUEUE_SIZE=15;
private volatile static ThreadPoolExecutor executor;/** 空闲线程回收时间 */
public static final int KEEP_ALIVE_TIME = 5000;private ThreadPoolServiceUtil() {};
// 获取单例的线程池对象
public static ThreadPoolExecutor getInstance() {
if (executor == null) {
synchronized (ThreadPoolServiceUtil.class) {
if (executor == null) {
executor = new ThreadPoolExecutor(DEFAULT_CORE_SIZE,
MAX_QUEUE_SIZE,
KEEP_ALIVE_TIME,
TimeUnit.MILLISECONDS,// 时间单位
new LinkedBlockingDeque(Integer.MAX_VALUE),// 线程队列
Executors.defaultThreadFactory()// 线程工厂
);
}
}
}
return executor;
}public void execute(Runnable runnable) {
if (runnable == null) {
return;
}
executor.execute(runnable);
}// 从线程队列中移除对象
public void cancel(Runnable runnable) {
if (executor != null) {
executor.getQueue().remove(runnable);
}
}
}