线程池的创建

什么是线程:

线程池:提前创建好一批线程,放入一个池子里,每当有任务来的时候,从池子里取一个线程去执行任务,任务执行结束,线程回收到池子里。

常见线程池:

newFixedThreadPool: 创建固定线程数的线程池

newCachedThreadPool: 创建线程数目动态增长的线程池.

newSingleThreadExecutor: 创建只包含单个线程的线程池.

newScheduledThreadPool: 设定 延迟时间后执行命令,或者定期执行命令. 是进阶版的 Timer

线程池的主要参数:

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)

创建一个新 ThreadPoolExecutor给定的初始参数。

-----------(以公司来喻线程池)----------

corePoolSize:核心线程数(公司的正式工数量,一但录用就不会辞退)

maximumPoolSize:最大线程数(正式工与临时工的数量最大数量)

keepAliveTime:线程的空闲时间(临时工允许的空闲时间)

unit:时间单位

workQueue:传递任务的阻塞队列(公司的任务表)

threadFactory:创建线程的工厂:参与线程的创建工作(参与公司招工工作)

handler:拒绝策略( 如果任务量超出公司的负荷了接下来怎么处理)

AbortPolicy(): 超过负荷, 直接抛出异常.

CallerRunsPolicy(): 调用者负责处理

DiscardOldestPolicy(): 丢弃队列中最老的任务.

DiscardPolicy(): 丢弃新来的任务

线程池的工作流程:

  1. 最开始时候,线程池是空的(公司一个员工也没有)

  1. 随着任务的提交,线程开始创建:

(1)如果当前线程数<核心线程数:创建线程(正式工没有招满)

(2)如果当前线程数==核心线程数:把工作添加到任务队列(正式工招满了)

(3)如果任务队列满了,且当前线程数<最大线程数:创建线程(正式工忙不过来了,开始招临时工)

(4)如果队列满了,且当前线程数==最大线程数:执行拒绝策略(正式工和临时工都招满了而且任务忙不过来了)

  1. 随着任务不断执行,任务数量不断减少,开始有了空闲线程(任务不断减少,有些员工没事干了)

如果一个线程的空闲时间>大于线程池规定的空闲时间&&当前线程的数量>核心线程数:销毁线程,直到当前线程数==核心线程数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值