线程池总结

线程池是一种使用预创建线程的集合来优化和管理线程使用的技术,以避免在请求时创建和销毁线程的开销。在Java中,线程池的核心实现是通过ThreadPoolExecutor类,它提供了执行提交任务的功能。

1.线程池的参数介绍

我们以jdk文档中的来详细介绍

     1.int corePoolSize

 (核心线程数)即使空闲时仍保留在池中的线程数,除非设置 allowCoreThreadTimeOut

 2.int maximumPoolSize

线程总数 包括核心线程数与非核心线程数)池中允许的最大线程数

    3.long keepAliveTime

非核心线程的最长摆烂时间)当线程数大于内核时,这是多余的空闲线程在终止前等待新任务的最大时间

    4. TimeUnit unit

     参数的时间单位

   5. BlockingQueue<Runnable> workQueue

用于在执行任务之前使用的队列。 这个队列将仅保存execute方法提交的Runnable任务

   先进后出队列模型

   6.ThreadFactory threadFactory

执行程序创建新线程时使用的工厂

   7.​​​​​​​ RejectedExecutionHandler handler

执行被阻止时使用的处理程序,因为达到线程限制和队列容量

以下为四种拒绝策略:

2.线程池的工作流程

当一个新任务提交到线程池时,线程池会按照以下流程处理任务:

  1. 核心线程检查:线程池首先检查核心线程池(corePoolSize)中是否有线程空闲。如果有空闲线程,就使用这些线程执行新任务。如果核心线程都在忙,则进入下一步。

  2. 任务队列检查:线程池会检查任务队列(workQueue)是否已满。如果队列未满,新提交的任务将被放入队列中等待执行。如果队列已满,则进入下一步。

  3. 最大线程数检查:线程池会检查当前运行的线程数是否小于最大线程数(maximumPoolSize)。如果小于,线程池会创建新的线程来执行任务。如果已达到或超过最大线程数,则任务将被拒绝,并执行拒绝策略(RejectedExecutionHandler)。

线程池有五种状态:RUNNINGSHUTDOWNSTOPTIDYINGTERMINATED。可以通过shutdown()shutdownNow()方法来关闭线程池。shutdown()方法会使线程池进入SHUTDOWN状态,只中断空闲线程;而shutdownNow()方法会使线程池进入STOP状态,中断所有线程

3.使用Executors创建常见的线程池

1newFixedThreadPool 创建一个固定大小的线程池,可控制线程最大并发数,超出的线程会在队列中等待。适用于负载比较重的服务器,为了资源的合理利用,需要限制当前线程数量。

2.newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。适用于并发执行大量短期的小任务,或者是负载较轻的服务器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值