1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package com.alvin.common.util;
- import java.util.concurrent.*;
- import java.util.concurrent.atomic.AtomicInteger;
- /**
- * 线程池工具类
- *
- * @author tianyunperfect
- * @date 2021/02/03
- */
- public class ThreadPoolUtils {
- /**
- * 获取线程池
- *
- * @param corePoolSize 核心池大小
- * @param maximumPoolSize 最大池大小
- * @param keepAliveTime 维持时间
- * @param unit 单位
- * @param queueSize 队列的大小
- * @param poolName 池名称
- * @param handler 拒绝策略
- * @return {@link ThreadPoolExecutor}
- */
- public static ThreadPoolExecutor getThreadPool(
- int corePoolSize,
- int maximumPoolSize,
- long keepAliveTime,
- TimeUnit unit,
- int queueSize,
- String poolName,
- RejectedExecutionHandler handler) {
- return new ThreadPoolExecutor(
- corePoolSize, maximumPoolSize,
- keepAliveTime, unit,
- new LinkedBlockingDeque<>(queueSize),
- new MyThreadFactory(poolName),
- handler
- );
- }
- /**
- * 修改于默认线程池工程类,添加了自定义线程名
- *
- * @author tianyunperfect
- * @date 2021/02/03
- */
- public static class MyThreadFactory implements ThreadFactory {
- private static final AtomicInteger poolNumber = new AtomicInteger(1);
- private final ThreadGroup group;
- private final AtomicInteger threadNumber = new AtomicInteger(1);
- private final String namePrefix;
- MyThreadFactory(String name) {
- SecurityManager s = System.getSecurityManager();
- group = (s != null) ? s.getThreadGroup() :
- Thread.currentThread().getThreadGroup();
- //自定义名称
- if (name == null || name.isEmpty()) {
- name = "pool";
- }
- namePrefix = name + "-" +
- poolNumber.getAndIncrement() +
- "-thread-";
- }
- public Thread newThread(Runnable r) {
- Thread t = new Thread(group, r,
- namePrefix + threadNumber.getAndIncrement(),
- 0);
- if (t.isDaemon())
- t.setDaemon(false);
- if (t.getPriority() != Thread.NORM_PRIORITY)
- t.setPriority(Thread.NORM_PRIORITY);
- return t;
- }
- }
- }
|