| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android 中的多线程简介 -> 正文阅读 |
|
[移动开发]Android 中的多线程简介 |
一、概念讲解进程:是程序运行过程中系统进行资源分配和调度的一个独立单位,使多个程序可 并发执行,以提高系统的资源利用率和吞吐量。 线程:一个基本的CPU执行单元 & 程序执行流的最小单元。 线程自己不拥有系统资源,与其他线程共享进程所拥有的全部资源。(并发、同步) 线程和进程的关系:进程是资源分配的最小单位,线程是CPU调度的最小单位。 线程依附于进程。 二、线程的分类UI线程(主线程):Android系统在程序启动时会自动启动一条主线程 处理四大组件与用户进行交互的事情(如 UI 显示、界面交互相关)。 工作线程(子线程):手动创建的线程,主要用于耗时的操作(网络请求、I/O 操作等) 。 三、线程优先级Android 系统中线程线程优先级分为10个级别,分别用Thread类常量表示。 设置线程优先级:通过方法 setPriority(int grade) 进行优先级设置,默认线程优先级是5,即 Thread.NORM_PRIORITY。 四、线程的生命周期线程的生命周期:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)五种状态 1\ 五、Android多线程实现方式1、基础实现方式1、继承 Thread 类,重写 run() 方法; 2、实现 Runnable 接口,重写 run() 方法 3、实现 Callable 接口,重写 call() 方法 2、组件实现方式1、AsyncTask 是一个 Android 已封装好的轻量级异步类,属于抽象类,即使用时需实现子类。在工作线程中执行任务,如耗时任务 可以将工作线程的执行结果传递给主线。 2、HandlerThread 是一个 Android 已封装好的轻量级异步类。在工作线程中执行任务,如耗时任务 可以将工作线程的执行结果传递给主线。可实现延迟操作。 3、IntentService 是Android 里的一个封装类,继承四大组件之一的 Service。处理异步请求 & 实现多线程 不符合多个数据同时请求的场景。所有的任务都在同一个 Thread looper 里执行。 ?3、高级实现形式 -- 线程池(ThreadPool)????????可复用并管理线程,如控制最大并发线程数量、统一分配 & 调度。降低因线程的创建 & 销毁带来的性能开销。提高线程响应速度 & 执行效率。 ?构造函数: 常见的4种功能线程池 1、定长线程池(FixedThreadPool)。只有核心线程 & 不会被回收、线程数量固定、任务队列无大小限制(超出的线程任务会在队列中等待) ,控制线程最大并发数,通过?Executors.newFixedThreadPool()?创建 2、定时线程池(ScheduledThreadPool )核心线程数量固定、非核心线程数量无限制(闲置时马上回收),执行定时 / 周期性 任务,通过?Executors.newScheduledThreadPool()创建 3、可缓存线程池(CachedThreadPool)只有非核心线程、线程数量不固定(可无限大)、灵活回收空闲线程(具备超时机制,全部回收时几乎不占系统资源)、新建线程(无线程可用时), 执行大量、耗时少的线程任务,通过?Executors.newCachedThreadPool()创建 4、单线程化线程池(SingleThreadExecutor)只有一个核心线程(保证所有任务按照指定顺序在一个线程中执行,不需要处理线程同步的问题),不适合并发但可能引起IO阻塞性及影响UI线程响应的操作,如数据库操作,文件操作等,通过?Executors.newSingleThreadExecutor()创建 六、线程安全线程安全需要保证基本特性:
1、Synchronized 关键字
2、Obejct类的wait/notify方法
3、重入锁实现线程同步 Lock 1、一般使用其实现类 ReentrantLock,ReentrantLock获取锁定与三种方式:
2、ReentrantLock 和 Synchronized 的区别: 线程 A 和 B 都要获取对象 O 的锁定,假设 A 获取了对象 O 锁,B 将等待 A 释放对 O 的锁定:
七、经验总结1、禁止在代码中使用“new Thread”创建新的 Thread !
2、禁止频繁使用 HandlerThread !
3、禁止直接使用 AsyncTask.execute() 执行耗时操作!
4、严禁使用 Executors 工具类来创建线程池
????????这只是个人对于Android中线程的总结,如果有错误,欢迎大家留言! |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 | -2025/2/5 20:09:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |