import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author linfm
* @create 2019-12-02 14:28
**/
public class ThreadPoolFactory {
private static Logger logger = LoggerFactory.getLogger(ThreadFactory.class);
static AtomicInteger ct = new AtomicInteger();
static int coreThread = 10;
static int maxThread = 20;
static int keepAliveTime = 10000;
static int blockQueueSize = 10;
static TimeUnit timeUnit = TimeUnit.MILLISECONDS;
static String threadNamePrefix = "app-thread-";
private static Map<String, Object> maps = new HashMap<>();
private static ThreadFactory threadFactory = new ThreadFactory() {
private AtomicInteger threadNo = new AtomicInteger(0);
@Override
public Thread newThread(Runnable r) {
String threadName = threadNamePrefix + threadNo.incrementAndGet();
return new Thread(r, threadName);
}
};
private static RejectedExecutionHandler rejectedExecutionHandler = new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
logger.error("RejectExecution ");
}
};
private static class Inner {
private static ExecutorService executorService = new ThreadPoolExecutor(coreThread, maxThread, keepAliveTime, timeUnit,
new ArrayBlockingQueue<>(blockQueueSize), threadFactory, rejectedExecutionHandler);
}
public static ExecutorService getExecutorService() {
return Inner.executorService;
}
public static void main(String[] args) {
getExecutorService().submit(new Runnable() {
@Override
public void run() {
System.out.println("test");
}
});
}
}