Android线程池

一、Android中的异步方式

AsyncTask

        底层用到了线程池。AsyncTask封装了线程池和Handler

        主要是为了方便开发者在子线程中更新UI

        AsyncTask内的Handler是一个静态的Handler对象,为了能够将执行环境切换到主线程,这就要求Handler这个对象必须在主线程中创建。由于静态成员会在加载类的时候进行初始化,因此这就变相要求AsyncTask的类必须在主线程中加载,否则同一个进程中的AsyncTask都无法正常工作。

优点:

  • 封装了Handler和消息队列,并提供了方便的方法来在后台线程执行任务,并在主线程更新UI。适用于简单的异步操作和UI更新场景

缺点:

  • 对于复杂的线程间通信需求,AsyncTask可能无法满足要求。它在执行多个异步任务时可能存在串行执行的问题,并且不适合长时间运行的任务。

注意:

        从Android 3.0开始,默认情况下AsyncTask是串行执行的。但在Android 3.0之前是并行执行的

IntentService

        IntentService内部采用HandlerThread来执行任务,当任务执行完毕后IntentService会自动退出
        特殊的Service,它继承了Service并且它是抽象类。IntentSerice可用于执行后台耗时的任务,当任务执行后它会自动停止,同时由于IntentService是服务的原因,这导致他的优先级比单纯的线程要高很多,所以IntentService比r较适合执行一些高优先级的后台任务

HandlerThread

底层直接使用了线程,是一种消息循环的线程,内部使用Handler

二、线程池

1.使用方式

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory) {...
}

2.参数详解:

  • corePoolSize:核心线程数

    是指线程池中长期存活的线程数

  • maximumPoolSize:最大线程数

    是指线程池允许创建的最大线程数量,最大线程数的数量包含核心线程数
    当线程池中核心线程都处理执行状态,有新请求的任务时:
    工作队列未满:新请求的任务加入工作队列
    工作队列已满:线程池会创建新线程,来执行这个任务,创建新线程的数量受到最大线程数的限制

  • keepAliveTime:空闲线程存活时间

    线程数大于核心线程数时,空闲线程在等待新任务到达的最大时间,如果超过这个时间还没有任务请求,该空闲线程就会被销毁

  • util,空闲线程存活时间的单位
    keepAliveTime的计量单位。枚举类型TimeUnit类
  • workQueue:工作队列
    工作队列用于存储待执行的任务。当线程池中的线程都在忙碌时,新提交的任务将被添加到工作队列中等待执行
  • threadFactory:线程工厂
    用于创建新线程。线程工厂提供了创建线程的方法,可以自定义线程的名称、优先级等属性
  • rejectedExecutionHandler:拒绝策略
    定义了当线程池无法接受新任务时的处理策略。当工作队列已满且线程池中的线程数已达到最大线程数时,新任务将被拒绝执行。常见的拒绝策略有丢弃、丢弃最旧的任务、抛出异常等

3.作用

限制无限制的创建线程

4.Android常用的线程池

在Executors里面对应的方法:

  • FixedThreadPool :固定大小线程池

     该线程池维护一个固定数量的线程。无论任务多少,都只会创建固定数量的线程来执行任务。当所有线程都处于忙碌状态时,新任务将被放入队列等待

  • CachedThreadPool :缓存线程池

     该线程池根据任务的数量动态调整线程的数量。如果有可用的空闲线程,则会重用它们;如果没有可用的线程,则会创建新的线程。如果线程空闲时间过长,超过一定阈值,那么这些空闲线程将会被终止并移除

  • SingleThreadPool :单个线程池

     该线程池只包含一个线程,用于顺序执行所有任务。即使任务异常或终止,也会有新线程取代它。适用于需要按顺序执行任务的场景。

  • ScheduledThreadPool :调度线程池

     该线程池用于执行延迟任务或周期性任务。可以指定任务的执行时间或间隔,并由线程池自动触发执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/757432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极客早报第3期:罗斯否认插足凯特王妃婚姻;清明放假调休3天;国产伟哥去年销售近13亿

一分钟速览新闻点&#xff01; 每日简报 罗斯否认插足凯特王妃婚姻清明放假调休3天国产伟哥去年销售近13亿男子持台球杆殴打2名女店员被抓今日春分淀粉肠小王子带货日销售额涨超10倍[高中生被打伤下体休学 邯郸通报](https://www.baidu.com/s?wd高中生被打伤下体休学 邯郸通报…

nginx 中 user 配置的作用

在 Nginx 配置文件中&#xff0c;user 指令用于指定 Nginx 运行时所使用的用户和用户组。默认情况下&#xff0c;Nginx 会以 nobody 用户的身份运行(即使使用 root 用户运行nginx进程, nginx运行过程中线程的用户还是用的nobody)&#xff0c;这是一个低权限用户&#xff0c;专门…

ARM Cortex-R82处理器在压缩SSD场景的应用

ScaleFlux公司宣布在其下一代企业级SSD控制器产品线中采用Arm公司的Cortex-R82处理器。这一决策旨在应对企业环境中对高带宽存储解决方案日益增长的需求&#xff0c;并通过提升数据传输速度和效率来满足市场期待。 Arm Cortex-R82处理器是Arm公司迄今为止性能最强的实时处理器…

STC 51单片机烧录程序遇到一直检测单片机的问题

准备工作 一&#xff0c;需要一个USB-TTL的下载器 &#xff0c;并安装好对应的驱动程序 二、对应的下载软件&#xff0c;stc软件需要官方的软件&#xff08;最好是最新的&#xff0c;个人遇到旧的下载软件出现问题&#xff09; 几种出现一直检测的原因 下载软件图标&#xf…

Unbuntu20.04 git push和pull相关问题

文章目录 Unbuntu20.04 git push和pull使用&#xff11;&#xff0e;下载[Git工具包](https://git-scm.com/downloads)&#xff12;&#xff0e;建立本地仓库&#xff13;&#xff0e;将本地仓库与github远程仓库关联&#xff14;&#xff0e;将本地仓库文件上传到github远程仓…

J4G企业通讯ip电话 sip对讲主机 停车场对讲主机

J4G企业通讯ip电话 sip对讲主机 停车场对讲主机 SV-J4G 是一款企业级彩屏网络电话&#xff0c;具有高清语音&#xff0c;320x240 2.8英寸彩屏&#xff0c;支持千兆以太网&#xff0c;12个SIP账号&#xff0c;支持PoE供电&#xff0c;支持外接EHS无线耳机&#xff0c;三方电话会…

vuex是怎么做到将数据注入到每一个组件里面的?

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 的主要目标是帮助开发者更好地管理应用的状态&#xff0c;使得状态的变化更加可预测和易于调试。 Vuex 将…

Grok-1:参数量最大的开源大语言模型

Grok-1&#xff1a;参数量最大的开源大语言模型 项目简介 由马斯克领衔的大型模型企业 xAI 正式公布了一项重要动作&#xff1a;开源了一个拥有 3140 亿参数的混合专家模型&#xff08;MoE&#xff09;「Grok-1」&#xff0c;连同其模型权重和网络架构一并公开。 此举将 Gro…

清华大模型ChatGLM3部署初体验

正文共&#xff1a;1555 字 17 图&#xff0c;预估阅读时间&#xff1a;2 分钟 ChatGLM3是智谱AI和清华大学KEG实验室联合发布的对话预训练模型。该项目在GitHub的工程链接为&#xff1a; https://github.com/THUDM/ChatGLM3 在人工智能领域中&#xff0c;类似“3B”、“6B”、…

C++--STL标准库

一.模板 模板是C中泛型编程的基础。一个模板就是一个创建类或函数的蓝图。 生活中常见的模板有: 编写一个比较两个值大小的函数&#xff0c;如果第一个值大于第二个值返回大于0的数字,两个值相等返回0,第一个值小于第二个值返回小于0的数字。 我们可以根据值类型定义多个函数&…

OxyPlot使用笔记(1)

TrackerFormatString设置的是tracker中字符串的格式。其中{0}是Series的Title&#xff0c;{1}是x轴的Title&#xff0c;{2}是x值&#xff0c;{3}是y轴的Title&#xff0c;{4}是y值&#xff1b;图上点击事件可以用Series.MouseDown PointChange&#xff1b;然后再 private void…

Go语言实战:深入掌握标准库flag的强大用法

Go语言实战&#xff1a;深入掌握标准库flag的强大用法 引言flag库基础命令行参数的基本概念使用flag库定义和解析命令行参数处理非选项命令行参数小结 高级用法自定义Flag的解析命令行参数的分组和嵌套小结 实战技巧组织复杂命令行应用的参数错误处理和用户帮助信息调试命令行应…

php基于人工智能预警突发疾病系统python-flask-django-nodejs

根据现实需要&#xff0c;此系统我们设计出一下功能&#xff0c;主要有以下功能模板。 前台功能&#xff1a;首页、医生、疾病知识、后台管理。 医生功能&#xff1a;首页、个人中心、咨询信息管理、疾病预警管理、高血压管理、糖尿病管理。 用户功能&#xff1a;首页、个人中心…

数据分析能力模型分析与展示

具体内容&#xff1a; 专业素质 专业素质-01 数据处理 能力定义•能通过各种数据处理工具及数据处理方法&#xff0c;对内外部海量数据进行清洗和运用&#xff0c;提供统一数据标准&#xff0c;为业务分析做好数据支持工作。 L1•掌握一…

SinoDB客户端工具dbaccess

类似Oracle的客户端工具sqlplus&#xff0c;Mysql的客户端工具mysql&#xff0c;SinoDB数据库也有自带的命令行客户端工具dbaccess。 dbaccess 识别用户输入&#xff0c;将用户输入的 SQL 语句打包发送给 SinoDB 数据库服务器执行&#xff0c;然后接收服务器的执行结果&#xf…

Leet code 238 除自身以外的数组的乘积

解题思路 以示例1为例 创建两个数组dp&#xff08;统计该位置之的所有乘积&#xff09; bp&#xff08;统计该位置之后的所有乘积&#xff09; 比如 1 2 3 4 3的dp应该等于 1*2 bp应该等于 4 这样 dp* bp就为该位置的答案 分别计算出每个位置前后的乘积然后放入数组 然…

3.leetcode---验证回文串(Java版)

链接: https://leetcode.cn/problems/XltzEq/description/ 给定一个字符串 s &#xff0c;验证 s 是否是 回文串 &#xff0c;只考虑字母和数字字符&#xff0c;可以忽略字母的大小写。 本题中&#xff0c;将空字符串定义为有效的 回文串 。 示例 1: 输入: s “A man, a plan…

2022年安徽省职业院校技能大赛 (高职组)“云计算”赛项样卷

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 第一场次&#xff1a;私有云(5…

【Linux】自动化构建工具-make/Makefile

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. 认识make/Makefile3. 了解make/Makefile原理3.1 依赖关系和依赖方法3.2 make检测的顺序3.3 PHONY:XXX 4. makefile内置符号 1. 前言 在上一篇中已经了解了【Linux】编译器-gcc/g使用&#xff0c;这次来一起…

Arch xfce桌面修改中文locale为英文locale和i3wm禁用触摸板

中文很烦人&#xff0c;要切换输入法&#xff0c;所以更改 localectrl list-locales localectl set-locale en_US.UTF-8 localectl status另外有一个可替代的输入法方案: fcitx5 自行搜fcitx5 archwiki 重启&#xff0c;提示修改目录为英文&#xff0c;保留英文 i3wm 禁用触…