线程池的 7 大参数整理。
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)
ThreadPoolExecutor 在创建之初,是不会立即初始化corePoolSize数量的Thread的,而是通过外部request来一个一个的创建,当达到corePoolSize数目之后,就会维持至少corePoolSize数目的Thread在pool中,哪怕他们都处于空闲状态(idle)。corePoolSize >= 0。
maximumPoolSize >= corePoolSize,maximumPoolSize>0
当线程池线程数量超过corePoolSize时,多余的空闲线程会在多长时间内被销毁。
销毁的线程数=maximumPoolSize(最大线程数)-corePoolSize(核心线程数)。
空闲线程存活时间的描述单位,有以下选项:
提交但未执行的任务队列,有以下选项:
线程池创建线程时调用的工厂方法,通过此方法可以设置线程的优先级、线程命名规则以及线程类型(用户线程还是守护线程)等。一般情况下使用默认的,即Executors类的静态方法defaultThreadFactory(),也可以自定义。
import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadFactory;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class Test { public static void main(String[] args) { // 创建线程工厂 ThreadFactory threadFactory = new ThreadFactory() { @Override public Thread newThread(Runnable runnable) { // 创建线程池中的线程 Thread thread = new Thread(runnable); // 设置线程名称 thread.setName("Thread-" + runnable.hashCode()); // 设置线程优先级(最大值:10) thread.setPriority(Thread.MAX_PRIORITY); //...... return thread; } }; // 创建线程池 ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor( 5, 10, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(10), threadFactory ); try{ threadPoolExecutor.submit(new Runnable() { @Override public void run() { Thread thread = Thread.currentThread(); System.out.println(String.format("线程:%s,线程优先级:%d",thread.getName(), thread.getPriority())); } }); }catch (Exception e) { } finally { threadPoolExecutor.shutdown(); } }}
拒绝策略。当线程池的任务超出线程池队列可以存储的最大值之后,执行的策略。
本文链接:http://www.28at.com/showinfo-26-13521-0.html程序员必会之最详细的ThreadPoolExecutor 线程池七大参数含义
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: Spring事务超时到底是怎么回事?