前言
在concurrent包里,主要是管理线程池
用处
我们来看看这个自定义管理线程池部分有什么用,是怎么用的
一个是在NettyServer里面用的
DefaultEventExecutorGroup serviceHandlerGroup = new DefaultEventExecutorGroup(
RuntimeUtil.cpus() * 2,
ThreadPoolFactoryUtil.createThreadFactory("service-handler-group", false)
);
创建一个事件处理线程池,把我们自定义的ThreadFactory传进去,用于控制这里面的线程是守护线程还是飞守护线程
另一个是在CustomShutdownHook里面
ThreadPoolFactoryUtil.shutDownAllThreadPool();
用与关掉所有的线程池
Config
就是一些参数,方便下面的方法里调用
public class CustomThreadPoolConfig {
//默认参数
private static final int DEFAULT_CORE_POOL_SIZE = 10;//默认核心线程池大小
private static final int DEFAULT_MAXIMUM_POOL_SIZE_SIZE = 100;//默认最大线程池大小
private static final int DEFAULT_KEEP_ALIVE_TIME = 1;//默认空闲超时时间,超过这个时间就是死了
private static final TimeUnit DEFAULT_TIME_UNIT = TimeUnit.MINUTES;//时间单位是分钟
private static final int DEFAULT_BLOCKING_QUEUE_CAPACITY = 100;//默认阻塞队列
private static final int BLOCKING_QUEUE_CAPACITY = 100;//阻塞队列容量
//可配置参数
private int corePoolSize = DEFAULT_CORE_POOL_SIZE;
private int maximumPoolSize = DEFAULT_MAXIMUM_POOL_SIZE_SIZE;
private long keepAliveTime = DEFAULT_KEEP_ALIVE_TIME;
private TimeUnit unit = DEFAULT_TIME_UNIT;
//使用有界队列
private BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(BLOCKING_QUEUE_CAPACITY);
}
ThreadPoolFactoryUtil
用于管理线程池、创建线程池,可创建守护和飞守护线程池
private static final Map<String, ExecutorService> THREAD_POOLS = new ConcurrentHashMap<>();//存放线程池的map
private ThreadPoolFactoryUtil() {
}
算了直接看代码吧,比较简单