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

Android中常见的线程池

日常开发中我们常常使用到线程池,其能有效管理线程资源,避免过多线程导致系统资源浪费、又能复用线程资源,避免频繁的创建/销毁线程。在Android中线程池的实现为ThreadPoolExecutor类,本文主要记录该类相关的知识点。

线程池的六大参数

corePoolSize

该参数描述核心线程的数量,线程池中分为核心线程和非核心线程,其本质都是线程,但是核心线程在空闲时一般不会被回收,除非设置了allowCoreThreadTimeOut=true.而非核心线程在空闲后会被回收(回收时间受keepAliveTime参数控制)。

maximumPoolSize

该参数描述非核心线程的数量

keepAliveTime

该参数描述空闲线程的存活时间,一个线程(常常是非核心线程)空闲keepAliveTime时间后,会被回收调。

unit

该参数是描述keepAliveTime存活时间的单位,常见的有毫秒和秒

workQueue

该参数是存储任务的队列,通过execute方法递交的runnable会存储在该参数中

threadFactory

该参数是用来创建线程的工厂类,当线程池中需要新建线程时,会调用该参数的newThread方法创建线程

执行流程

线程池的执行流程中主要涉及到上述到六个参数。当调用execute方法添加一个runnable时,流程如下

  1. 如果当前存活的线程数小于corePoolSize,调用thread的newThread新建核心线程执行任务
  2. 如果当前线程数大于等于corePoolSize,则将该任务添加到对应的workQueue队列中,如果添加成功,则等待执行,否则进行第三步
  3. 如果存活线程数小于最大线程数,则新建非核心线程执行该任务,如果存活线程已达到最大线程数,则调用RejectExecutionHandler的rejectExecution方法通知调用者。

常见线程池

线程池分类关键参数适用场景
FixedThreadPoolcoreSize=size maximumPoolSize=size快速响应的任务,因为其核心线程不会被回收
CacheThreadPoolcoreSize=0 maximumPoolSize=Integer.MAX大量的、耗时短的任务
ScheduledThreadPoolcoreSize=size maximumPoolSize=Integer.MAX定时任务或固定周期任务
SingleThreadPoolcoreSize=1 maximumPoolSize=1单线程执行所有任务
http://www.lryc.cn/news/387902.html

相关文章:

  • C# YoloV8 模型效果验证工具(OnnxRuntime+ByteTrack推理)
  • 什么是Cookie?有什么用?如何清除浏览器中的Cookie?
  • 数据库基本管理
  • 43.三倍游戏
  • LoadBalance 负载均衡
  • Wails 安装初体验
  • 架构师篇-10、DDD实战篇:通过领域模型落地系统
  • C++ | Leetcode C++题解之第190题颠倒二进制位
  • Git安装与使用及整合IDEA使用的详细教程
  • 高效办公秘诀:使用Excel超级处理器提高工作效率,提升职场竞争力
  • 深入探讨Python中的元编程:装饰器与元类
  • MaxKb/open-webui+Ollama运行模型
  • 2-requests模块(6节课学会爬虫)
  • 使用ECharts创建动态数据可视化图表
  • Nacos配置中心客户端源码分析(一): 客户端如何初始化配置
  • gin数据解析,绑定和渲染
  • Django 对模型创建的两表插入数据
  • Lua: 轻量级多用途脚本语言
  • PotPlayer安装及高分辨率设置
  • 实现写入缓存策略的最佳方法探讨
  • 【Day03】0基础微信小程序入门-学习笔记
  • libctk shared library的设计及编码实践记录
  • 【代码随想录训练营】【Day 65】【图论-2】| 卡码 99
  • 【动态规划】139. 单词拆分
  • 【C++】空指针访问成员函数
  • Linux的IO易错点总结
  • 【Android面试八股文】说一说你对Android中的Context的理解吧
  • AI在音乐创作中的角色:创造还是毁灭?
  • [深入理解DDR] 总目录
  • 模板方法模式在金融业务中的应用及其框架实现