线程池的七个参数的理解-银行柜台模型

线程池的七个参数的理解

一.线程池的模型:银行柜台模型

  1. 线程池的七大参数分别为:

(1)corePoolSize:线程池中常驻核心线程数(图片是3:这里相当于为绿色的柜台,表示正在上班营业的柜台)

(2)maximumPoolSize:线程池能够容纳同时执行的最大线程数(图片是5:绿色加上黄色的柜台数量,黄色表示正在休息的柜台)

(3)keepAliveTime:多余的空闲线程存活时间(这里没有体现,可以理解为柜员4,5营业以后,如果长时间没有客户到来,4,5柜员就会去休息了)

(4)unit:keepAliveTime的时间单位(秒,分,小时等)

(5)workQueue:任务队列,被提交但尚未执行的任务(座椅等候区)

(6)threadFactory:表示生成线程池中的工作线程的线程工厂

(7)handler:拒绝策略,表示当队列满了并且工作线程大于等于线程池的最大线程数(maximumPoolSize)时如何拒绝(客户经理对客人说,今天人流量太多了,去其他网点吧)

基本模型

  1. 如果有1~3个客人,那么目前开放的1,2,3,柜台刚刚好可以能够支持业务
    三个客户办理业务
  2. 如果有4~6个客人,那么目前开放的1,2,3,柜台刚刚好可以能够支持三个客户办理业务,剩下的人就在等候区等待
    三个客户办理,三个人在队列等待办理
  3. 如果有7~8个客人,那么目前开放的1,2,3柜台支持三个客户办理业务,三个人在等候区等待,柜台4和5就会被唤醒,来办理业务,但是线程池模型这里客户7,8会插队,不去等候直接办理,来的都是VIP哈
    4,5柜台开启办理
  4. 如果有9个及以上个客人,除去办理业务的8个人,再来的人就会被拒之门外,handler拒绝策略生效
    再多的人就会被拒绝了,除非有人办理完业务走掉了
    这里我理解如果有人走掉了,比如客户1办完业务了,这时候客户9来了的话就会被允许进入柜台1办理业务

二.代码测试:

import java.util.concurrent.*;

public class ThreadPoolTest {
    public static void main(String[] args) {
        //参数表示3个正在办理业务的柜台,两个休息的柜台,休息柜台如果办完业务,一秒钟没人来就回去休息了
        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(3, 5, 1, TimeUnit.SECONDS, new ArrayBlockingQueue<>(3), Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
        for (int i = 0; i < 9; i++) {
            //修改这里i表示有多少个柜台在办理业务
            threadPool.submit(()->{
                System.out.println(Thread.currentThread().getName()+"----->正在办理业务");
            });
        }
    }
}

一个人办理业务
三个人办理业务
五个人办理业务,没有动用4,5,柜台,1,2,3办完以后还在等待1,2,3柜台办完,客人还是去的1,2,3柜台办理的业务
8个人办理业务,就会发现,4,5柜台被启用了,开始办理业务了
9个人办理业务,一次来的人太多了,第九个就会被拒绝,抛出异常了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值