Android的线程和线程池 --笔记
来源:互联网 发布:js 启动定时器 编辑:程序博客网 时间:2024/06/05 19:27
线程在Android中一个很重要的概念,从用途来说,线程分为主线程和子线程。主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时操作,因此耗时操作必须放在子线程中去执行。除了Thread本身以外,在Android中可以扮演线程角色的还有很多,比如AsyncTask(线程池)和IntentService(线程),同时HandlerThread也是一种特殊的线程。
在操作系统中,线程是操作系统调度的最小单元,同时线程也是一种受限的系统资源,即线程不肯能无限制的产生,并且线程的创建和销毁都会有相应的开销。当系统中存在大量的线程时,系统会通过时间片轮转的方式调度每个线程,因此线程不肯能做到绝对的并行,除非线程数量小于等于CPU的核心数,一般来说这是不肯能的。所以,正确的做法是采用线程池,一个线程池会缓存一定数量的线程,避免因为频繁线程创建和销毁所带来的系统开销。
线程池
线程池的优点
1.重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销
2.能有效控制线程池的最大并发数,避免大量的线程之间因互相抢占系统资源而导致的阻塞现象。
3.能够对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能
ThreadPoolExecutor 线程池的参数
ThreadPoolExecutor是线程池的真正实现,它的构造方法提供了一系列参数来配置线程池。
1.corePoolSize
线程池的核心线程数,默认情况下,核心线程会在线程池一直存活,即使它们处于闲置状态。
2.maximumPoolSize
线程池所能容纳的最大线程数,当活动线程数达到这个数值后,后续的新任务将会被阻塞
3.keepAliveTime
非核心线程闲置时的超时时长,超过这个时长,非核心线程就会被回收
4.unit
用于指定keepAliveTime参数的时间单位
5.workQueue
线程池中的任务队列,通过线程池的execute方法提交的Runable对象会存储在这个参数中。
6.threadFactory
线程工厂,为线程池提供创建新线程的功能。
线程池的分类
1.FixedThreadPool
线程数量固定的线程池,当线程处于空闲状态时,它们并不会被回收,除非线程池被关闭了。
2.CachedThreadPool
线程数量不定的线程池,他只有非核心线程,并且其最大线程数为Integer.MAX_VALUE
3.ScheduledThreadPool
核心线程数量是固定的,非核心线程数是没有限制的,并且当非核心线程闲置时会被立即回收
4.SingleThreadExecutor
这类线程池内部只有一个核心线程,他确保所有的任务都在同一个线程中按顺序执行。
- Android的线程和线程池 --笔记
- 线程池和线程的选择--笔记
- Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- 十一、Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池(一)
- Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- Android 的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- Android的线程和线程池
- FileProvider的用法
- Qt实现网络数据传输
- order by 需要索引
- 鱼眼图像校正(球面等距投影模型)_|||
- xListView多条目加载,判断有无图片及图片缓存到sd卡
- Android的线程和线程池 --笔记
- ubuntu下配置OPenCV3.1.0出现的小问题解决方案
- oracle buffercache
- 同义词视图索引
- Eureka源码分析:Eureka不会进行二次Replication的原因
- kernel开机logo总结
- Selenium常用方法的封装
- windows计算器(calc)按键功能详解
- 微信公众平台开发——微信授权登录(OAuth2.0)