线程池的简单封装和使用
来源:互联网 发布:火星网络用语 编辑:程序博客网 时间:2024/04/30 05:03
通过线程池代理类和线程池工厂完成对线程池操作的解耦。
简单的代理模式和简单的工厂模式
1.创建一个代理类
public class ThreadPoolProxy { ThreadPoolExecutor mExecutor; // 只需创建一次 int mCorePoolSize; int mMaximumPoolSize; long mKeepAliveTime; public ThreadPoolProxy(int corePoolSize, int maximumPoolSize, long keepAliveTime) { super(); mCorePoolSize = corePoolSize; mMaximumPoolSize = maximumPoolSize; mKeepAliveTime = keepAliveTime; } private ThreadPoolExecutor initThreadPoolExecutor() {//双重检查加锁 if (mExecutor == null) { synchronized (ThreadPoolProxy.class) { if (mExecutor == null) { TimeUnit unit = TimeUnit.MILLISECONDS; BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>();// 无界队列 ThreadFactory threadFactory = Executors.defaultThreadFactory(); RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();// 丢弃任务并抛出RejectedExecutionException异常。 mExecutor = new ThreadPoolExecutor(// mCorePoolSize,// 核心的线程数 mMaximumPoolSize,// 最大的线程数 mKeepAliveTime, // 保持时间 unit, // 保持时间对应的单位 workQueue,// 缓存队列/阻塞队列 threadFactory, // 线程工厂 handler// 异常捕获器 ); } } } return mExecutor; } /**执行任务*/ public void execute(Runnable task) { initThreadPoolExecutor(); mExecutor.execute(task); } /**提交任务*/ public Future<?> submit(Runnable task) { initThreadPoolExecutor(); return mExecutor.submit(task); } /**移除任务*/ public void removeTask(Runnable task) { initThreadPoolExecutor(); mExecutor.remove(task); }}
代理类将线程池单例化。并提供了几个核心的操作方法。属于将线程池构建的放法进行抽取。
2.创建工厂类
public class ThreadPoolFactory { static ThreadPoolProxy mNormalPool; static ThreadPoolProxy mDownLoadPool; /**得到一个普通的线程池*/ public static ThreadPoolProxy getNormalPool() { if (mNormalPool == null) { synchronized (ThreadPoolProxy.class) { if (mNormalPool == null) { mNormalPool = new ThreadPoolProxy(5, 5, 3000); } } } return mNormalPool; } /**得到一个下载的线程池*/ public static ThreadPoolProxy getDownLoadPool() { if (mDownLoadPool == null) { synchronized (ThreadPoolProxy.class) { if (mDownLoadPool == null) { mDownLoadPool = new ThreadPoolProxy(3, 3, 3000); } } } return mDownLoadPool; }}
3.使用
ThreadPoolFactory.getDownLoadPool().execute(task);
希望能对开源框架的封装有一些启发。
0 0
- 线程池的简单封装和使用
- 指示器的简单封装和使用
- android Sqlite的简单封装和使用
- FSCalendar的简单封装和使用
- OKHttp的基本使用和简单封装
- Toolbar的简单使用和封装
- Greendao的简单使用和封装
- 简单的工作者线程封装
- redis学习之Jedis使用线程池封装redis的基本操作及spring的简单封装
- 使用QueueUserWorkerItem实现的线程池封装
- 使用QueueUserWorkerItem实现的线程池封装
- 使用QueueUserWorkerItem实现的线程池封装
- Volley的简单使用,和简单二次封装
- UE4线程池源码分析和线程池的封装
- 线程的创建和简单的使用
- 线程池的简单使用
- 线程池的简单使用
- 线程池的简单使用
- 苹果地图使用之定位
- 基本法
- (初学)Java 快速排序
- shader基础之练习题
- 动态规划入门
- 线程池的简单封装和使用
- 整理Cocos2d-x 面试题解
- apache防止恶意解析
- Oracle 中的 group by rollup 学习
- 51nod 1521 一维战舰
- maven依赖关系中Scope的作用
- Maximal Information Coefficient (MIC)最大互信息系数
- 图书馆借阅管理系统
- Android沉浸式状态栏及导航栏实现