再看rpc之线程池

前言

在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() {

}

算了直接看代码吧,比较简单


← Posts