Android 开发 ThreadPool(线程池) 总结
本文是介绍线程池的基础篇。
一、线程池的作用
创建异步线程的弊端:
1、每次new Thread创建对象,导致性能变差。
2、缺乏统一的管理,可能导致无限制的线程运行,严重的后果就是OOM 或者死机。
使用线程池的有点:
1、重用性大,减少对象的创建,提高性能。
2、可有效控制并发线程数,提高系统资源利用率,避免资源争夺。
3、可提供多种功能:定时、循环、并发、单一等功能。
三、ExecutorService 线程池
Java通过Executors提供了四类常用的线程池。
1、newCachedThreadPoll
定义一个线程池,当线程池里面有可复用的线程,重用线程执行,如果没有,新建线程执行。线程池容量可以无线大。
ExecutorService cacheThread = Executors.newCachedThreadPool();
for (int i = 0; i < 100; i++) {
cacheThread.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
});
}
2、newSingleThreadExecutor
创建一个线程池,只有唯一的一个活动的工作线程,有序(FIFO,LIFO,优先级等顺序)的处理队列中的任务。
ExecutorService singleExecutor = Executors.newSingleThreadExecutor();
for (int i = 0; i < 100; i++) {
singleExecutor.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
});
}
3、newFixedThreadPool
定义一个可用并发数的线程池,超过并发数的线程,在队列里面等待。
ExecutorService fixedThread = Executors.newFixedThreadPool(3);
for(int i = 0; i < 100 ; i ++){
fixedThread.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
});
}
4、newScheduledThreadPool
创建一个定长线程池,支持定时及周期性任务执行。
ScheduledExecutorService scheduledThread = Executors.newScheduledThreadPool(3);
//延时执行
scheduledThread.schedule(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}, 2*1000, TimeUnit.SECONDS);
//固定的间隔执行,不受任何影响
scheduledThread.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}, 10*1000, 1*1000, TimeUnit.SECONDS);
//当线程执行完毕后的,开始计算时间间隔再次执行
scheduledThread.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}, 10*1000, 1*1000, TimeUnit.SECONDS);
四、AnsyncTask异步线程
提供两个线程池:
1、THREAD_POOL_EXECUTOR异步线程池
2、SERIAL_EXECUTOR同步线程池
使用方式:
new AsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, 0);
注意:
1、当默认使用AsyncTask.execute()执行异步任务,默认使用SERIAL_EXECUTOR.
2、SERIAL_EXECUTOR是在THREAD_POOL_EXECUTOR基础上,加一个task的集合来维护顺序的。
Android 开发 ThreadPool(线程池) 总结的更多相关文章
- Android开发之线程池使用总结
线程池算是Android开发中非常常用的一个东西了,只要涉及到线程的地方,大多数情况下都会涉及到线程池.Android开发中线程池的使用和Java中线程池的使用基本一致.那么今天我想来总结一下Andr ...
- android中的线程池学习笔记
阅读书籍: Android开发艺术探索 Android开发进阶从小工到专家 对线程池原理的简单理解: 创建多个线程并且进行管理,提交的任务会被线程池指派给其中的线程进行执行,通过线程池的统一调度和管理 ...
- ThreadPool线程池 小结
ThreadPool类提供一个线程池,该线程池可用于发送工作项.处理异步 I/O.代表其他线程等待以及处理计时器 线程池通过为应用程序提供一个由系统管理的辅助线程池使您可以更为有效地使用线程.一个线程 ...
- 转载【浅谈ThreadPool 线程池】
浅谈ThreadPool 线程池 http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html
- 【多线程】-ThreadPool线程池
ThreadPool介绍: Thread类是一个静态类,所有不存在实例化构造函数操作,直接可以调用其内所存在的方法. 微软官网给出的解释: 提供一个线程池,该线程池可用于执行任务.发送工作项.处理异步 ...
- .net 线程基础 ThreadPool 线程池
1. ThreadPool 线程池异步: //public static bool QueueUserWorkItem(WaitCallback callBack); //public static ...
- 浅谈ThreadPool 线程池(引用)
出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 浅谈ThreadPool 线程池 相关概念: 线程池可以看做容纳线程的 ...
- 多线程之旅(ThreadPool 线程池)
一.什么是ThreadPool 线程池(源码) 1.线程池顾名思义,有我们的系统创建一个容器装载着我们的线程,由CLR控制的所有AppDomain共享.线程池可用于执行任务.发送工作项.处理异步 I/ ...
- Android下基于线程池的网络访问基础框架
引言 现在的Android开发很多都使用Volley.OkHttp.Retrofit等框架,这些框架固然有优秀的地方(以后会写代码学习分享),但是我们今天介绍一种基于Java线程池的网络访问框架. 实 ...
随机推荐
- CVE-2020-1938/CNVD-2020-10487 幽灵猫漏洞
漏洞描述(后期跟进漏洞分析) Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和Java ...
- python + excel工资条自动生成
年终绩效分配结果出来了,领导要求每人要清楚地知道自己的情况.要求:总绩效和各分类都要清楚.这就表示我们要给每人六个纸条,一个总的,五个分的.打出来,裁开,分发给每个人!累死人.所以,我就想能否每人生成 ...
- C#序列化与反序列化学习笔记
本笔记摘抄自:https://www.cnblogs.com/maitian-lf/p/3670570.html,记录一下学习过程以备后续查用. 序列化是把一个内存中的对象的信息转化成一个可以持久化保 ...
- canvas-画圆心的算法
公式为x=16sin~3t,y=(13cost-5cos2t-2cos3t-cos4t) x+r(16Math.pow(Math.sin(t),3)) y-r(13Math.cos(t)-5Math. ...
- 安装Kibana到Linux(源码)
运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:Kibana-7.1.0 硬件要求:最低2核4GB 安装过程 1.源码安装JDK 1.1.从官网 ...
- 安装Bind到CentOS(YUM)
运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:Bind-x 硬件要求:无 安装过程 1.配置YUM源 [root@localhost ~]# ...
- 【你不知道的javaScript 上卷 笔记7】javaScript中对象的[[Prototype]]机制
[[Prototype]]机制 [[Prototype]]是对象内部的隐试属性,指向一个内部的链接,这个链接的作用是:如果在对象上没有找到需要的属性或者方法引用,引擎就 会继续在 [[Prototyp ...
- vue-routerV3.1版本报错:message: "Navigating to current location ("/home") is not allowed",
出现这个错误的原因是,在路由跳转的时候两次push的path地址相同 解决方法两种: 1.切换版本回3.0版本 2.在你引了vue-router的js文件里加上如下代码即可 import VueRou ...
- ISCC2018 Reverse & Pwn writeup
Reference:L1B0 Re RSA256 春秋欢乐赛原题..flag都不变的 给了三个加密文件和公钥证书public.key,可以使用openssl进行处理 $openssl rsa -pub ...
- 54.Python中Meta类常见的配置
对于一些模型级别的配置.我们可以通过在模型中定义一个类,叫做Meta.然后在这个类中添加一些属性来控制模型的作用. 注意:添加的这个类一定要是Meta,否者的话Django就会不能够识别. from ...