关于ThreadPoolExecutor参数详解

例子:

ThreadPoolExecutor executorPool = 
new ThreadPoolExecutor(3, 5, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(50));

3是corePoolSize - 意味着Jvm将为前3个任务的新任务创建新线程。并且其他任务将被添加到队列中,直到队列变满(50个任务)。

5是maxPoolSize - JVM可以创建最多5个线程。表示如果已经有3个任务/线程正在运行且队列已满,有50个待处理任务,并且如果还有一个新请求/任务到达队列,那么JVM将创建最多5个新线程(总线程数=前3个+新2个) ;

new LinkedBlockingQueue(50) - 总队列大小 - 它可以在其中排队50个任务。

当请求进入时,线程将最多创建3个,然后新请求将被添加到队列中,直到达到50,当队列已满时,将创建最新的线程maxPoolSize。一旦所有线程都在使用并且队列已满,任务将被拒绝。随着队列的减少,活动线程的数量也会减少。

SUN内部创建线程的规则:

  1. 如果线程数小于corePoolSize,则创建一个新线程以运行新任务。
  2. 如果线程数等于(或大于)corePoolSize,则将任务放入队列。
  3. 如果队列已满,并且线程数小于maxPoolSize,则创建一个新线程以运行任务。
  4. 如果队列已满,并且线程数大于或等于maxPoolSize,则拒绝该任务。

拒绝策略

ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 (默认)

ThreadPoolExecutor.DiscardPolicy:丢弃任务,但是不抛出异常。

ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最旧的任务,然后重新提交被拒绝的任务

ThreadPoolExecutor.CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值