自定义线程池参数不一样的详解——ThreadPoolExecutor

int corePoolSize:表示线程池中的核心线程的数量,当ThreadPoolExecutor对象实例化时不会创建线程,有任务要执行时才会创建。当线程池中工作的线程数小于这个值时,新的任务到来后会继续创建线程,直到线程数量达到这个值

int maximumPoolSize:表示线程池中的最大线程的数量,当线程池中的线程都在工作时,后面的线程会添加到workQueue中,如果队列已满,才会重新创建线程,并且总大小不会超过这个值

long keepAliveTime:表示核心线程之外的线程的空闲存活时间

Time Unitunit:示核心线程之外的线程的空闲存活时间单位

BlockingQueue<Runnable> workQueue:如果线程池中已有corePoolSize数量的线程在工作,后面的任务就会添加到这个队列中

ThreadFactory threadFactory:线程工厂

RejectedExecutionHandler handler:线程池的拒绝策略,如果workQueue已满,并且线程池中的线程数量达到maximumPoolSize,就会触发线程拒绝策略
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中自定义线程池参数可以通过ThreadPoolExecutor类的构造方法来实现。具体来说,可以设置以下参数: 1. corePoolSize:线程池的核心线程数,即在没有任务需要执行时线程池的基本大小。默认值为1。 2. maximumPoolSize:线程池允许创建的最大线程数。当队列中的任务数量达到上限时,线程池会继续创建新的线程,直到达到该最大值。默认值为Integer.MAX_VALUE。 3. keepAliveTime:线程池中的线程空闲时间超过该值时,多余的线程会被销毁。默认值为0,表示当线程池中的线程空闲时立即销毁。 4. unit:keepAliveTime的时间单位,默认为TimeUnit.MILLISECONDS。 5. workQueue:任务队列,用于存储等待执行的任务。常见的有ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue等。 6. threadFactory:线程工厂,用于创建新的线程。默认为Executors.defaultThreadFactory()。 7. handler:当线程池中的线程和队列都满了,新提交的任务会由RejectedExecutionHandler来处理。常见的有ThreadPoolExecutor.AbortPolicy、ThreadPoolExecutor.CallerRunsPolicy、ThreadPoolExecutor.DiscardPolicy、ThreadPoolExecutor.DiscardOldestPolicy等。 以下是一个示例代码: ``` ThreadPoolExecutor executor = new ThreadPoolExecutor( 10, // corePoolSize 20, // maximumPoolSize 60, // keepAliveTime TimeUnit.SECONDS, // unit new ArrayBlockingQueue<>(100), // workQueue Executors.defaultThreadFactory(), // threadFactory new ThreadPoolExecutor.AbortPolicy() // handler ); ``` 该示例代码中,线程池的核心线程数为10,最大线程数为20,空闲线程的存活时间为60秒,任务队列为ArrayBlockingQueue,队列容量为100,线程工厂为默认的Executors.defaultThreadFactory(),当线程池中的线程和队列都满了时,新提交的任务会被拒绝并抛出异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值