不得不知的Android线程管理
来源:互联网 发布:收购淘宝店铺的网站 编辑:程序博客网 时间:2024/05/16 15:30
线程管理
作为一个老鸟,不要告诉我,你的线程还都是野线程,没有一个统一的管理。
执行定时任务
ScheduledThreadPoolExecutor代替Timer
//手动创建线程池,根据alibaba代码规约 避免使用Executors 创建线程池mScheduledExecutorService = new ScheduledThreadPoolExecutor(1);
创建线程池
ThreadPoolExecutor
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
参数说明:
- corePoolSize 线程池中核心线程的数量
- maximumPoolSize 线程池中最大线程数量
- keepAliveTime 非核心线程的超时时长,当系统中非核心线程闲置时间超过keepAliveTime之后,则会被回收。如果ThreadPoolExecutor的allowCoreThreadTimeOut属性设置为true,则该参数也表示核心线程的超时时长
- unit 第三个参数的单位,有纳秒、微秒、毫秒、秒、分、时、天等
- workQueue 线程池中的任务队列,该队列主要用来存储已经被提交但是尚未执行的任务。存储在这里的任务是由ThreadPoolExecutor的execute方法提交来的。
threadFactory 为线程池提供创建新线程的功能,这个我们一般使用默认即可
handler 拒绝策略,当线程无法执行新任务时(一般是由于线程池中的线程数量已经达到最大数或者线程池关闭导致的),默认情况下,当线程池无法处理新线程时,会抛出一个RejectedExecutionException。
针对于workQueue参数我多说几点:workQueue是一个BlockingQueue类型,那么这个BlockingQueue又是什么呢?它是一个特殊的队列,当我们从BlockingQueue中取数据时,如果BlockingQueue是空的,则取数据的操作会进入到阻塞状态,当BlockingQueue中有了新数据时,这个取数据的操作又会被重新唤醒。同理,如果BlockingQueue中的数据已经满了,往BlockingQueue中存数据的操作又会进入阻塞状态,直到BlockingQueue中又有新的空间,存数据的操作又会被冲洗唤醒。BlockingQueue有多种不同的实现类,下面我举几个例子来说一下:
1.ArrayBlockingQueue:这个表示一个规定了大小的BlockingQueue,ArrayBlockingQueue的构造函数接受一个int类型的数据,该数据表示BlockingQueue的大小,存储在ArrayBlockingQueue中的元素按照FIFO(先进先出)的方式来进行存取。
2.LinkedBlockingQueue:这个表示一个大小不确定的BlockingQueue,在LinkedBlockingQueue的构造方法中可以传一个int类型的数据,这样创建出来的LinkedBlockingQueue是有大小的,也可以不传,不传的话,LinkedBlockingQueue的大小就为Integer.MAX_VALUE
以上用法转至:http://blog.csdn.net/u012702547/article/details/52259529
- 不得不知的Android线程管理
- 开发者不得不知的Android权限说明
- 开发者不得不知的Android权限说明
- 你不得不知的Android调试工具
- 开发者不得不知的Android权限说明
- Android 不得不知Tag的妙用
- Android初级不得不知的知识
- 不得不知的Android Studio常用设置
- Android Studio 不得不知的超实用的快捷键
- 8大你不得不知的Android调试工具
- 8大你不得不知的Android调试工具
- 十大你不得不知的Android调试工具
- 8大你不得不知的Android调试工具
- 8大你不得不知的Android调试工具
- 8大你不得不知的Android调试工具
- 8大你不得不知的Android调试工具
- 8大你不得不知的Android调试工具
- 8大你不得不知的Android调试工具
- jQuery的函数,有些直接就用$this(表示当前操作的标签),而也不见this在哪里定义过,这个this究竟谁什么?答:把this当成在内从中存在的JavaScript的一个变量即可,一个关键字
- .word说明
- Jenkins+github+maven自动构建发布SpringBoot项目
- android-studio 复制项目到新的路径 Installation fail问题解决
- POJ 1741 Tree——点分治
- 不得不知的Android线程管理
- 电商商家后台-easyUI的combox三级联动
- ActiveMQ(6)-基于networkConnector的Broker-Cluster方案
- hdu 1162
- 6-11 判断奇偶性
- Netty实战手册(一)
- android studio 3.0 升级问题:原来module中的包没法引用
- linux中ftp提示--553 Could not create file
- 彻底解决 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 最近我的VS2010不知道怎么回事,平时用的好好的,近期竟然出现了所谓的 L