线程池解析

线程池的参数介绍

  • 核心线程数 (corePoolSize) : 线程池初始化时线程的数量,处于空闲状态也不会被回收。
  • 最大线程数 (maximumPoolSize) : 线程池可容纳的最大线程数量,包括核心线程数和非核心线程数。
  • 空闲线程存活时间 (keepAliveTime) : 非核心线程空闲时的存活时间,超过这段时间会被回收。
  • 空闲线程存活时间单位 (unit) : keepAliveTime参数的时间单位。
  • 工作任务队列 (workQueue) : 存放待处理任务的阻塞队列。可以根据需要灵活设置队列:需要优先级,就可以设置 PriorityBlockingQueue ; 如果不需要优先级,并且任务数目相对恒定,可以设置 ArrayBlockingQueue ; 如果不需要优先级,并且任务数目变动较大,可以设置 LinkedBlockingQueue
  • 线程工厂 (threadFactory) : 创建线程的工厂,工厂模式的体现,使用工厂类创建线程,主要是为了在创建过程中,对线程的属性做出一些设置。
  • 拒绝策略 (RejectedExecutionHandler) : 线程数量达到最大值并且任务队列已满,会根据不同的拒绝策略处理无法执行的任务。

线程池的工作流程 

  1.  新任务提交 :当新任务提交到线程池时,根据核心线程的状态决定如何处理这个任务。
  2. 核心线程调度:如果核心线程有空闲的,使用空闲的核心线程处理这个任务;如果没有空闲的,并且当前线程数小于核心线程数,就创建出一个新的核心线程来处理这个任务。
  3. 队列存储:如果核心线程数已满且工作队列未满,则将任务加入到队列中等待执行。
  4. 非核心线程处理:工作队列已满,且当前线程数小于最大线程数,则创建非核心线程来处理任务。
  5. 执行拒绝策略:如果线程数达到最大数且任务队列已满,则根据拒绝策略处理无法执行的任务。

 使用Executors创建常见的线程池

  • 创建固定大小的线程池 
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
  •  创建动态适应数目的线程池
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
  •  创建多个线程执行时间到了的任务的线程池
ExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
  •  创建一个线程的线程池
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

 

 

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值