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 首次发布
该代码示例展示了如何使用Java的enum实现线程池(ThreadPoolExecutor)的单例模式。线程池配置包括核心线程数、最大线程数、空闲线程存活时间以及拒绝策略。线程工厂用于定制线程名称。
1519

被折叠的 条评论
为什么被折叠?



