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

android 动态创建线程池,Android四种常见的线程池

Android四种常见的线程池

引入线程池的好处

提升性能,创建和消耗对象时费CPU资源

防止内存过度消耗,控制活动线程的数量,防止并发线程过多

创建线程,推荐使用Executors的工厂方法来创建线程池,Executors类是官方提供的一个工厂类,它里面封装好了重多功能不一样的线程池。下面介绍一些常用的线程池:

public ThreadPoolExecutor(

//核心线程数,除非allowCoreThreadTimeOut被设置为true,否则它闲着也不会死

int corePoolSize,

//最大线程数,活动线程数量超过它,后续任务就会排队

int maximumPoolSize,

//超时时长,作用于非核心线程(allowCoreThreadTimeOut被设置为true时也会同时作用于核心线程),闲置超时便被回收

long keepAliveTime,

//枚举类型,设置keepAliveTime的单位,有TimeUnit.MILLISECONDS(ms)、TimeUnit. SECONDS(s)等

TimeUnit unit,

//缓冲任务队列,线程池的execute方法会将Runnable对象存储起来

BlockingQueue workQueue,

//线程工厂接口,只有一个new Thread(Runnable r)方法,可为线程池创建新线程

ThreadFactory threadFactory)

四种常见的线程池

FixedThreadPool()

该方法,返回的是一个固定线程数量的线程池,该线程池中的线程数量始终不变,即不会再创建新的线程,也不会销毁已经创建好的线程,自始至终都是固定的线程在工作,所以该线程池可以控制线程的最大并发数。

CachedThreadPool()

该方法返回的是一个可以根据实际情况调整线程池中线程数量的线程池,即该线程池中的数量不确定,是根据实际情况动态调整的。这个线程池是有一个保持活动时间的参数的,如果空闲线程超过了保持活动的时间,那么就会立刻停止该线程,默认时间是60s

SingleThreadExecutor()

该方法返回一个只有一个线程的线程池,即每次只能执行一个线程任务,多余的任务会保存到一个任务队列中,等待这一个线程空闲,当这个线程空闲了再按FIFO方式顺序执行任务队列中的任务。

ScheduledThreadPool()

该方法返回一个可以控制线程池内线程定时或周期性执行某任务的线程池。

相关文章:

  • android包之间的关系,第 4 章 依赖关系,Android 库和多项目设置
  • android数组的定义数组长度,Android OpenGLES3.0 入门教程(三)——顶点数组和统一变量...
  • android mediastore.images.media.insertimage,尝试获取图像URI时,mediastore.images.media.insertImage返回空值...
  • android程序拍照内存溢出,彻底解决Android 拍照 内存溢出 Out of Memory的问题
  • 华为1120发布鸿蒙战略,华为发布智慧屏战略 首款产品搭载鸿蒙系统
  • Android备忘录github,Github备忘录
  • lua android异常捕获,使用lua实现try-catch异常捕获
  • 弹出自动消失html,用JS实现弹出div层过2秒自动消失的效果
  • html5主题标记是那个,网页文件主体标记 index.html是什么文件
  • html5走格子游戏,JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
  • html导航栏点击显示该栏内容,点击导航栏,实现下方内容改变
  • html 安卓 web 页面布局,webApp 页面布局
  • 学 HTML5 开发 零基础 经验,零基础能不能学会HTML5开发技术?
  • html表示dom怎么设置,{HTML5}DOM 和 CSS 操作-第二节-设置元素及内容
  • 中职计算机应用基础教案1,中职计算机应用基础教案版.ppt
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 《Java编程思想》读书笔记-对象导论
  • 【刷算法】求1+2+3+...+n
  • Brief introduction of how to 'Call, Apply and Bind'
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • CSS实用技巧
  • es6要点
  • Go 语言编译器的 //go: 详解
  • Java知识点总结(JavaIO-打印流)
  • js数组之filter
  • Redis 中的布隆过滤器
  • 扑朔迷离的属性和特性【彻底弄清】
  • 巧用 TypeScript (一)
  • 写代码的正确姿势
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 阿里云服务器购买完整流程
  • #162 (Div. 2)
  • #QT(TCP网络编程-服务端)
  • $(selector).each()和$.each()的区别
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (动态规划)5. 最长回文子串 java解决
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)visual stdio 书签功能介绍
  • (转载)hibernate缓存
  • (转载)利用webkit抓取动态网页和链接
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET开发人员必知的八个网站
  • .Net面试题4
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @NestedConfigurationProperty 注解用法
  • @RequestMapping用法详解
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解