package com.yhcookie;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 线程池
* @author yhcookie
* @date 2021/4/23 18:37
*/
public class SingleThreadPoolExecutor extends ThreadPoolExecutor {
private volatile static SingleThreadPoolExecutor threadPoolExecutor = null;
private SingleThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory);
}
public static SingleThreadPoolExecutor getInstance(){
if (null == threadPoolExecutor){
synchronized (SingleThreadPoolExecutor.class){
if (null == threadPoolExecutor){
threadPoolExecutor = new SingleThreadPoolExecutor(
4,
100,
60,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(50),
new LocalThreadFactory());
}
}
}
return threadPoolExecutor;
}
static class LocalThreadFactory 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;
LocalThreadFactory() {
SecurityManager s = System.getSecurityManager();
this.group = s != null ? s.getThreadGroup() : Thread.currentThread().getThreadGroup();
this.namePrefix = "xxxxxx-pool-" + poolNumber.getAndIncrement() + "-thread-";
}
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(this.group, r, this.namePrefix + this.threadNumber.getAndIncrement(), 0L);
if (t.isDaemon()) {
t.setDaemon(false);
}
if (t.getPriority() != 5) {
t.setPriority(5);
}
return t;
}
}
}
单例线程池
最新推荐文章于 2024-07-03 14:22:47 发布