java线程池七大参数(转)

发布时间 2023-09-03 10:10:10作者: Mars.wang

转: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

丢弃进入队列最久的任务,然后把当前任务入队