Android编程自定义线程池与用法示例
作者:LovooGod 发布时间:2021-11-27 14:46:53
标签:Android,线程池
本文实例讲述了Android编程自定义线程池与用法。分享给大家供大家参考,具体如下:
一、概述:
1、因为线程池是固定不变的,所以使用了单例模式
2、定义了两个线程池,长的与短的,分别用于不同的地方。因为使用了单例模式,所以定义两个。
3、定义了两个方法,执行的与取消的
二、代码:
/**
* @描述 线程管理池
* @项目名称 App_Shop
* @包名 com.android.shop.manager
* @类名 ThreadManager
* @author chenlin
* @date 2014年3月29日 下午10:17:06
*/
public class ThreadManager {
private ThreadManager(){};
private static ThreadManager instance= new ThreadManager();
private ThreadPoolProxy longPoolProxy;
private ThreadPoolProxy shortPoolProxy;
public static ThreadManager getInstance(){
return instance;
}
/**
* 长线程池
* @return
*/
public synchronized ThreadPoolProxy createLongPool(){
if (longPoolProxy == null) {
//(int corePoolSize 线程池大小, int maximumPoolSize 最大值, long keepAliveTime 存活时间)
longPoolProxy = new ThreadPoolProxy(5, 5, 5000);
}
return longPoolProxy;
}
/**
* 短线程池
* @return
*/
public synchronized ThreadPoolProxy createShortPool(){
if (shortPoolProxy == null) {
shortPoolProxy = new ThreadPoolProxy(3, 3, 5000);
}
return shortPoolProxy;
}
public class ThreadPoolProxy{
private ThreadPoolExecutor pool;
private int corePoolSize; //线程数
private int maximumPoolSize; //线程满了后额外开的线程窗口
private long keepAliveTime;//没有线程执行时存活时间
public ThreadPoolProxy(int corePoolSize,int maximumPoolSize, long keepAliveTime){
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.keepAliveTime = keepAliveTime;
}
/**
* 执行线程
* @param runnable
*/
public void execute(Runnable runnable){
if (pool == null) {
//最多可有多少个线程排队
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>(10);
pool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.MILLISECONDS, workQueue);
}
pool.execute(runnable);
}
/**
* 取消线程
* @param runnable
*/
public void cancel(Runnable runnable){
if (pool != null) {
pool.remove(runnable);
}
}
}
}
三、使用方法:
ThreadManager.getInstance().createLongPool().execute(new Runnable() {
@Override
public void run() {
//SystemClock.sleep(2000);
final LoadResult result = loadFromServer();
if (result != null) {
Util.runOnUiThread(new Runnable() {
@Override
public void run() {
currentState = result.getValue();
showPages();
}
});
}
}
});
希望本文所述对大家Android程序设计有所帮助。
来源:http://blog.csdn.net/lovoo/article/details/51714023
0
投稿
猜你喜欢
- 前言微信群里的一个提问引发的这个问题,C#异步有多少种实现方式?首先想要知道C#异步有多少中实现方式,首先我们要知道.NET提供的执行异步操
- 由于jdk 1.8 之后sun.misc 包下的 BASE64Decode的依赖 被移除我们需要在自己的项目中引入EncodeUtils 工
- 1.稀疏数组引入1.1 使用场景笔者在课程设计中曾写过一个扫雷小游戏,为了便于讲解,我们来做个简化(实际比这个复杂),只考虑当前位置有雷与无
- 壹、入围方案Sentinelgithub地址:https://sentinelguard.io/zh-cn/docs/introductio
- 日常对于金额计算,应该都是用的BigDecimal,可是苦于没有好的工具类方法,现在贡献一个我正在用的对于数字计算的工具类,项目中就是用的这
- Windows10 上的JDK安装配置1、前往 JDK 官网下载对应 jdk 版本安装包:下载地址本文以 jdk-8u161-windows
- name和url属性的作用定义feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调
- 最近看Android FrameWork层代码,看到了ThreadLocal这个类,有点儿陌生,就翻了各种相关博客一一拜读;自己随后又研究了
- 序列化简介Java 的对象序列化将那些实现 Serializable 接口的对象转换成一个字节序列,并能在之后将这个字节序列完全恢复为原来的
- 前言今天的文章从下面这张图片开始,这张图片Java开发们应该很熟悉了我们都知道无锁状态是对象头是有位置存储hashcode的,而变为偏向锁状
- 前言首先,我们要讲的是JVM的垃圾回收机制,我默认准备阅读本篇的人都知道以下两点:JVM是做什么的Java堆是什么因为我们即将要讲的就是发生
- 本文实例为大家分享了C#实现计算器窗体程序的具体代码,供大家参考,具体内容如下功能设计1、计算器中,添加 0-9 共十个数字键。2、计算器中
- 上一篇文章我们介绍了Apache Commons Math3学习之数值积分实例代码,这里给大家分享math3多项式曲线拟合的相关内容,具体如
- 什么是JSON?JSON (JavaScript Object Notation) is a lightweight data-interc
- 1、配置 IDEA 的 Maven 环境单击菜单栏中的 File → Settings → Build, Ex
- 把SpringBoot项目打包成Docker镜像有两种方案:全自动化:先打好docker镜像仓库,然后在项目的maven配置中配置好仓库的地
- springboot整合mybatis实现数据库更新批处理1.在mapper接口中编写方法/** * 修改book表中的销量和库存
- 前言java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也不能做出来非常好用,
- Java读取txt文件内容。可以作如下理解:首先获得一个文件句柄。File file = new File(); file即为文件句柄。两人
- 今天一起学习下如何在Spring中进行异步编程。我们都知道,web服务器处理请求 request 的线程是从线程池中获取的,这也不难解释,因