当前位置: 首页 > news >正文

Java线程池

(一)线程池的优势

  总的来说,池化技术都有以下几个优势

1.降低资源消耗:减少了我们频繁地去创建和销毁线程

2.提高响应速度:当任务到达时,任务不需要等待线程的创建,直接拿到一个线程就可以响应

3.便于管理:我们通过线程池统一的去管理我们所有线程,进行统一分配,调优和监控

(二)线程池参数

我们来看一下每个参数都是什么意思

corePollSize(核心线程数):表示我们线程池最少有多少个线程,默认情况下,这些线程是一直存在的。只有达到了核心线程数再来一个任务我们才放到任务队列

maximumPoolSize(最大线程数):表示我们线程池最多能有几个线程,只有当我们任务队列满了,我们才去突破核心线程数,但是线程数要小于最大线程数

keepAliveTime(最大空闲时间):线程池中的非核心线程最大能空闲多久就要被回收

unit(最大空闲时间的单位):指定keepAliveTime的时间单位

wordQueue(任务队列):通过线程池execute()方法提交的任务存储在该参数中,采用阻塞队列实现

threadFactory(线程工厂):一个创建线程的工厂

handler(拒绝策略):  有以下四种

1)AbortPolicy():超出多大线程数,直接抛出异常

2)CallerRunsPolicy():调⽤者负责处理多出来的任务.

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

4)DiscardPolicy():丢弃新来的任务.

(三)线程池的工作原理

我们用一张图表示

(四)任务队列(workQueue)

任务队列是通过阻塞队列实现的,我们大概分为两种一种是有界队列,一种是无界队列

有界队列:防内存溢出,所以有拒绝策略,也就是我们上面说的拒绝策略

无界队列:任务队列可以一直添加任务,知道内存耗尽,所以此时的最大线程数就没有意义了

那Java给我们提供了7种,我们大概了解一下就可以

(五)线程池的种类

1.定长线程池(FixThreadPool):线程池中线程数量固定,只有核心线程,当所有线程都在忙,任务就会在队列中等待

  适用场景:控制线程最大并发数 

2.定时线程池(ScheduledThreadPool):核心线程数固定,但是非核心线程数无限,执行完闲置10ms后进行回收

适用场景:执行定时或者周期性任务

3.可缓存线程池(CachedThreadPool):没有核心线程,非核心线程数无限,也就是线程池大小动态调整,线程空闲60s后被回收

适用场景:执行大量,耗时少的任务

4.单线程化线程池(SingleThreadExcutor):只有一个核心线程,没有非核心线程,执行完就回收

适用场景:不适合并发但是可能引起IO阻塞的操作

相关文章:

  • 网站开发做账seo优化软件大全
  • 重庆建设人才网站网络口碑推广公司
  • 网站开发保密协议范本下载网络营销方法有几种类型
  • 三晋联盟做网站需要多钱传统营销方式有哪些
  • 外贸网站是怎么做的seo优化策略
  • 搭建小程序需要准备什么seo查询工具
  • LLVM - 编译器前端 - 将源文件转换为抽象语法树
  • 在docker容器中运行Ollama部署deepseek-r1大模型
  • C# String 常用操作方法详解
  • 检查SSH安全配置-sshd服务端未认证连接最大并发量配置
  • React Native 核心技术知识点快速入门
  • 用大白话解释日志处理Log4j 是什么 有什么用 怎么用
  • 45.matlab产生正弦叠加信号并保存为txt文本
  • 智能驾驶ai算法学习路线图
  • C# 使用 Newtonsoft.Json 序列化和反序列化对象实例
  • 冒泡排序算法优化
  • Spring Security是什么?如何使用Spring Security进行安全控制?
  • 如何查看react的版本号
  • 计算机网络 第一章 概述(Overview)
  • 《机器学习数学基础》补充资料:矩阵的LU分解
  • 【解决】OnTriggerEnter/OnTriggerExit 调用匿名委托误区的问题
  • Wireshark:自定义类型帧解析
  • el-switch切换之前二次确认
  • HarmonyOS NEXT组件深度全解:十大核心组件开发指南与实战
  • 三个小时学完vue3 —— 简单案例(二)
  • 力扣 划分字母区间