Android线程池的简单使用
来源:互联网 发布:皇帝岛 珊瑚岛 pp 知乎 编辑:程序博客网 时间:2024/06/11 23:44
使用线程池的优点
1.实现了对线程的复用,减少的资源的开销2.节省了开启线程时损耗的时间,提高了app的流畅性3.能对线程进行管理,如并发数和任务的停止
线程池参数介绍
new ThreadPoolExecutor( //核心线程数,除非allowCoreThreadTimeOut被设置为true,否则它闲着也不会死 int corePoolSize, //最大线程数,活动线程数量超过它,后续任务就会排队 int maximumPoolSize, //超时时长,作用于非核心线程(allowCoreThreadTimeOut被设置为true时也会同时作用于核心线程),闲置超时便被回收 long keepAliveTime, //枚举类型,设置keepAliveTime的单位,有TimeUnit.MILLISECONDS(ms)、TimeUnit. SECONDS(s)等 TimeUnit unit, //缓冲任务队列,线程池的execute方法会将Runnable对象存储起来 BlockingQueue<Runnable> workQueue, //线程工厂接口,只有一个new Thread(Runnable r)方法,可为线程池创建新线程 ThreadFactory threadFactory)
线程池的工作过程
(1)当currentSize<corePoolSize时,没什么好说的,直接启动一个核心线程并执行任务。(2)当currentSize>=corePoolSize、并且workQueue未满时,添加进来的任务会被安排到workQueue中等待执行。(3)当workQueue已满,但是currentSize<maximumPoolSize时,会立即开启一个非核心线程来执行任务。(4)当currentSize>=corePoolSize、workQueue已满、并且currentSize>maximumPoolSize时,调用handler默认抛出RejectExecutionExpection异常。
Demo
FixThreadPool(固定核心线程数)Executors.newFixedThreadPool(线程数, new ThreadFactory());SingleThreadPool(单线程队列)Executors.newSingleThreadExecutor().execute(runnable);CachedThreadPool只有非核心线程,最大线程数非常大,所有线程都活动时,会为新任务创建新线程,否则利用空闲线程(60s空闲时间,过了就会被回收,所以线程池中有0个线程的可能)处理任务。ScheduledThreadPool(4个里面唯一一个有延迟执行和周期重复执行的线程池)//使用,延迟1秒执行,每隔2秒执行一次Runnable r Executors. newScheduledThreadPool (5).scheduleAtFixedRate(r, 1000, 2000, TimeUnit.MILLISECONDS); (1)核心线程数固定,非核心线程(闲着没活干会被立即回收)数没有限制。(2)从上面代码也可以看出,ScheduledThreadPool主要用于执行定时任务以及有固定周期的重复任务。
阅读全文
0 0
- Android线程池的简单使用
- Android中Excutor线程池的简单使用
- 线程池的简单使用
- 线程池的简单使用
- 线程池的简单使用
- 线程池的简单使用
- Android线程池(一)简单使用
- 线程的简单使用
- Android的线程池简单说明
- Android线程池的使用
- Android线程池的使用
- Android 线程池的使用
- Android线程池的使用
- Android 线程池的使用
- Android 线程池的使用
- 简单使用线程池
- 简单使用线程池
- ThreadPoolExecutor线程池的简单使用
- JS获取当前日期时间
- iOS逆向研究02
- 如何选择IT运维管理系统?
- Visual Studio2017 15.4提供预览版,面向Windows 10秋季更新(FCU)
- Android倒计时
- Android线程池的简单使用
- 谷歌浏览器黑屏问题
- 算法复杂度与稳定性
- 汉诺塔-递归
- python和php对比
- Elasticsearch单机Windows搭建
- Struts模型驱动
- bankForJS_inherit
- 基于python的汉诺塔