package com.boman.domain.utils; import com.google.common.util.concurrent.ThreadFactoryBuilder; import org.springframework.stereotype.Service; import java.util.concurrent.*; /** * @author shiqian * @desc 线程池 * @date 2021年09月09日 14:56 **/ @Service public class ThreadPoolService { /** * 自定义线程名称,方便的出错的时候溯源 */ private static final ThreadFactory THREAD_FACTORY = new ThreadFactoryBuilder().setNameFormat("myself-pool-%d").build(); /** * 功能描述: * * @param corePoolSize 线程池核心池的大小 * @param maximumPoolSize 线程池中允许的最大线程数量 * @param keepAliveTime 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间 * @param unit keepAliveTime 的时间单位 * @param workQueue 用来储存等待执行任务的队列 * @param threadFactory 创建线程的工厂类 * @param handler 拒绝策略类,当线程池数量达到上线并且workQueue队列长度达到上限时就需要对到来的任务做拒绝处理 * @return ExecutorService */ private static final ExecutorService EXECUTOR_SERVICE = new ThreadPoolExecutor( 4, 40, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1024), THREAD_FACTORY, new ThreadPoolExecutor.AbortPolicy() ); /** * 获取线程池 * * @return 线程池 */ private static ExecutorService getEs() { return EXECUTOR_SERVICE; } /** * 使用线程池创建线程并异步执行任务 ps:无返回值 * * @param runnable 任务 */ public static void execute(Runnable runnable) { getEs().execute(runnable); } }