再看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() {

}

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


  目录