标签:设置 atom 参数详解 str day nose 插入 rest adt
在ThreadPoolExecutor类中有4个构造函数,最终调用的是如下函数:
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
构造函数一共有7个参数,如下:
线程池中的核心线程数,当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于corePoolSize;如果当前线程数为corePoolSize,继续提交的任务被保存到阻塞队列中,等待被执行;如果执行了线程池的prestartAllCoreThreads()方法,线程池会提前创建并启动所有核心线程。当线程数小于等于corePoolSize时,默认情况下线程会一直存活在线程池中,即时线程处于空闲状态。如果allowCoreThreadTimeOut被设置为true时,无论线程数多少,那么线程处于空闲状态超过一定时间就会被销毁掉。
线程池中允许的最大线程数。如果当前阻塞队列满了,且继续提交任务,则创建新的线程执行任务,前提是当前线程数小于maximumPoolSize;
线程空闲时的存活时间,即当线程没有任务执行时,继续存活的时间;默认情况下,该参数只在线程数大于corePoolSize时才有用;如果allowCoreThreadTimeOut被设置为true时,无论线程数多少,线程处于空闲状态超过一定时间就会被销毁掉。
keepAliveTime的单位。TimeUnit是一个枚举类型,其包括:
用来保存等待被执行的任务的阻塞队列,且任务必须实现Runable接口,如下阻塞队列:
创建线程的工厂,通过自定义的线程工厂可以给每个新建的线程设置一个具有识别度的线程名,比如:
public class OneMoreThreadFactory implements ThreadFactory {
private static final AtomicInteger poolNumber = new AtomicInteger(1);
private final AtomicInteger threadNumber = new AtomicInteger(1);
private final String namePrefix;
public OneMoreThreadFactory() {
namePrefix = "OneMoreThread-" + poolNumber.getAndIncrement() + "-";
}
@Override
public Thread newThread(Runnable r) {
return new Thread( r, namePrefix + threadNumber.getAndIncrement());
}
}
线程池的饱和策略,当阻塞队列满了,且没有空闲的工作线程,如果继续提交任务,必须采取一种策略处理该任务,线程池提供了4种策略:
标签:设置 atom 参数详解 str day nose 插入 rest adt
原文地址:https://www.cnblogs.com/heihaozi/p/11734307.html