JUC学习-22-浅谈线程池参数&原理
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,Executors.defaultThreadFactory(), defaultHandler);}
参数1:int corePoolSize 核心线程数
参数2:int maximumPoolSize 最大线程数
参数3:long keepAliveTime 非核心线程空闲状态的存活时间
参数4:TimeUnit unit <span c时间单位(天、小时、分钟...) 用于配合第三个参数的
参数5:BlockingQueue workQueue 工作队列(阻塞队列)
参数6:ThreadFactory threadFactory 线程工厂
参数7:RejectedExecutionHandler handler 拒绝策略(AbortPolice 丢弃任务并抛出异常;DiscardPolice 丢弃任务但不抛出异常; DiscardOldestPolice 丢弃队列最前面的任务,然后尝试重新将任务加入到队列末尾,一直重复此过程;CallerRunsPolice 由调用线程处理该任务)
eg:
创建线程池,核心线程数(corePoolSize)10,工作队列(workQueue)长度10,最大线程数(maxmumPoolSize)。Execute执行30个任务 需要30个线程, 此时:
1、先创建10个核心线程 (任务 1 - 10)
2、10个线程放入到工作队列中 (任务 11 - 20)
3、根据最大核心线程数,创建10个非核心线程 (任务 1-21 - 30)
4、执行顺序: 先执行核心线程 (任务 1 - 10); 再执行 非核心线程 (任务 21 - 30); 再执行工作队列中的线程(任务 11 - 20)
