import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author x1ao4i
* 本类采用单例模式创建线程池执行器
*/
public class ThreadPoolSingleton {
enum ThreadPoolEnum {
THREAD_POOL_SINGLETON;
private ThreadPoolExecutor threadPoolExecutor;
private ThreadPoolEnum() {
ThreadFactory threadFactory = new ThreadFactory() {
AtomicInteger threadNum = new AtomicInteger(0);
@Override
public Thread newThread(Runnable r) {
// TODO Auto-generated method stub
return new Thread(r, "custom-thread-pool-" + threadNum.incrementAndGet());
}
};
ArrayBlockingQueue<Runnable> arrayBlockingQueue = new ArrayBlockingQueue<Runnable>(50);
// 参数分别是 核心线程数、最大线程数、最大空闲时间、空闲时间单位、队列、线程工厂、拒绝策略
threadPoolExecutor = new ThreadPoolExecutor(10, 20, 10, TimeUnit.SECONDS,
arrayBlockingQueue, threadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
}
public ThreadPoolExecutor generateThreadPool() {
return threadPoolExecutor;
}
}
public static ThreadPoolExecutor generateThreadPool() {
return ThreadPoolEnum.THREAD_POOL_SINGLETON.generateThreadPool();
}
}
线程池的使用
于 2023-06-28 21:34:45 首次发布