转:https://blog.csdn.net/ye17186/article/details/89467919
从源码来看,线程池构造有七个参数,corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue,threadFactory,handler
一、corePoolSize
核心线程池大小,线程池会维护一个最小线程数量,即使这些线程空闲,也不会被销毁;
如果有新任务进来,核心线程池已满的话,会先缓存到工作队列workQueue
二、maxmiumPoolSize
线程池最大线程数,如果新任务进来此时队列已满,但线程数未超过maximumPoolSize就会创建一个新线程,但不会无限创建,线程数最多不超过maximumPoolSize
三、keepAliveTime
空闲线程的存活时间,如果一个线程空闲且线程池中线程数超过核心线程池大小corePoolSize,则超过keepAliveTime后,这个线程就会被销毁
四、unit
keepAliveTime的单位
五、workQueue
用与缓存任务的工作队列,jdk提供了四种工作队列
5.1.ArrayBlockingQueue
基于数组的有界队列,可以有效防止线程资源耗尽的问题
5.2.LinkedBlockingQueue
基于链表的无界队列,使用此无界队列,会导致参数maxPoolSize不起作用
5.3.SynchronousQuene
不缓存任务的队列,生产者放入任务必须等到消费者取出任务,不会缓存,直接执行,没有可用线程,直接创建新线程,如果达到maximumPoolSize,执行拒绝策略
5.4.PriorityBlockingQueue
具有优先级的无界阻塞队列
六、threadFactory
线程工厂,创建一个新线程时使用的工厂,可以用来设定线程名、是否为daemon线程等等
七、handler
拒绝策略,jdk提供了四种拒绝策略
7.1.CallerRunsPolicy
该策略下,在调用者线程中直接执行被拒绝任务的run方法,除非线程池已经shutdown,则直接抛弃任务
7.2.AbortPolicy
直接丢弃任务,并抛出RejectedExecutionException异常
7.3.DiscardPolicy
直接丢弃,什么都不做
7.4.DiscardOldestPolicy
丢弃进入队列最久的任务,然后把当前任务入队
标签:缓存,java,队列,keepAliveTime,池七大,maximumPoolSize,任务,线程 From: https://www.cnblogs.com/wangbin2188/p/17674660.html