Java线程池

引入

  • 在实际使用中,线程是很占用系统资源的,如果对线程管理不善很容易导致系统问题。因此,在大多数并发框架中都会使用线程池来管理线程,使用线程池主要有如下好处:
  • 1.使用线程池可以重复利用已有的线程继续执行任务,避免线程在创建和销毁时造成的消耗。
  • 2、由于没有线程创建和销毁时的消耗,可以提高系统的响应速度
  • 3、通过线程池可以对线程进行合理的管理,根据系统的承受能力调整可运行线程数量的大小。

工作原理


工作原理:

  • 线程池执行所提交的任务过程:
  • 先判断线程池中核心线程池中所有的线程是否都在执行任务。如果不是,则创建一个线程执行刚提交的任务,否则,核心线程池中所有的线程都在执行任务,则进入第二步。
  • 2、判断当前的阻塞队列是否已满,如果未满,则将提交的任务放置在阻塞队列中,否则,进入第三步骤
  • 3.判断线程池中的所有线程是否都在执行任务,如果没有,则创建一个新的线程来执行任务,否则,则交给饱和策略进行处理。

分类

线程池的生命周期:


Running:能接受新提交的任务,并且也能处理阻塞队列中的任务。

Shutdown:关闭状态,不再接受新提交的任务,但却可以继续处理阻塞队列中已保存的任务。

Stop:不能接受新的任务,也不再处理队列中的任务,会中断正在处理的线程。

Tidying:如果所有的任务都已中止了,workerCount有效线程数为0,线程池进入该状态后会调用terminated() 方法进入Terminated状态。

Terminated:在terminated方法执行完后进入该状态,默认terminated()方法中什么也没有做。

线程池的创建


corePoolSize:核心线程数
maximumPoolSize:线程池能创建的线程的最大个数
keepAliveTime:空闲线程能存活的时间
unit:时间单位,为keepAliveTime指定时间单位
workQueue:阻塞队列,用于保存任务的阻塞队列
ThreadFactory:创建线程的工程类
handler:饱和策略

execute方法执行逻辑

  • 如果当前运行的线程少于corePoolSize,则会创建新的线程来执行新的任务。
  • 如果运行的线程个数等于或者大于corePoolSize,则会将提交的任务存放在阻塞队列workQueue中,
  • 如果当前的workQueue队列已满的话,则会创建新的线程来执行任务。
  • 如果线程个数已经超过了maximumPoolSize,则会使用饱和策略(拒绝策略)来进行处理。

线程池的关闭

  • 关闭线程池,可以通过shutdown和shutdownNow两个方法
  • 原理:遍历线程池中的所有线程,然后依次中断。
  • 1.shutdownNow:首先将线程池的状态设置为Stop,然后尝试停止所有的正在执行和未执行任务的线程,并返回等待执行任务的列表。
  • 2.shutdown:只是将线程池的状态设置为shutdown状态,然后中断所有没有正在执行任务的线程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值