adroid线程池的运用
来源:互联网 发布:ecmall微信商城源码 编辑:程序博客网 时间:2024/05/22 05:32
package com.cenzr.manager;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;/** * 管理线程池 */public class ThreadManager {private ThreadManager() {}private static ThreadManager instance = new ThreadManager();private ThreadPoolProxy longPool;private ThreadPoolProxy shortPool;public static ThreadManager getInstance() {return instance;}// 联网比较耗时// cpu的核数*2+1public synchronized ThreadPoolProxy createLongPool() {if (longPool == null) {longPool = new ThreadPoolProxy(5, 5, 5000L);}return longPool;}// 操作本地文件public synchronized ThreadPoolProxy createShortPool() {if(shortPool==null){shortPool = new ThreadPoolProxy(3, 3, 5000L);}return shortPool;}public class ThreadPoolProxy {private ThreadPoolExecutor pool;private int corePoolSize;private int maximumPoolSize;private long time;public ThreadPoolProxy(int corePoolSize, int maximumPoolSize, long time) {this.corePoolSize = corePoolSize;this.maximumPoolSize = maximumPoolSize;this.time = time;}/** * 执行任务 * @param runnable */public void execute(Runnable runnable) {if (pool == null) {// 创建线程池/* * 1. 线程池里面管理多少个线程2. 如果排队满了, 额外的开的线程数3. 如果线程池没有要执行的任务 存活多久4. * 时间的单位 5 如果 线程池里管理的线程都已经用了,剩下的任务 临时存到LinkedBlockingQueue对象中 排队 */pool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize,time, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(10));}pool.execute(runnable); // 调用线程池 执行异步任务}/** * 取消任务 * @param runnable */public void cancel(Runnable runnable) {if (pool != null && !pool.isShutdown() && !pool.isTerminated()) {pool.remove(runnable); // 取消异步任务}}}}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import java.util.concurrent.BlockingQueue;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.RejectedExecutionHandler;import java.util.concurrent.ThreadFactory;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;/** * 创建线程池,执行任务,提交任务 */public class ThreadPoolProxy {ThreadPoolExecutormExecutor;// 只需创建一次intmCorePoolSize;intmMaximumPoolSize;longmKeepAliveTime;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);}}
0 0
- adroid线程池的运用
- 线程池的运用
- Adroid中线程间的通信(一)
- 线程池类Executors的运用
- java 线程流和线程池的运用
- 关于java 线程/线程池 的处理以及运用 笔记
- Adroid美丽心理说项目的知识点运用
- java线程swingworker的运用
- Java线程的基本运用
- Adroid Fragment的使用
- Adroid AIDL的使用方法
- 线程池以及子线层运用
- adroid
- Java线程(三):JUC包原子性操作类与线程池的简单运用
- 简单的Syncronized线程的同步运用
- adroid phone MT 的流程
- Adroid 下菜单的使用
- Adroid::TextView控件的使用
- Java抽象类与接口的区别
- 某公司笔试题
- 【NOIP2015模拟10.22】最小代价
- 第九周项目2:深复制体验(2)
- 设计模式之行为类模式
- adroid线程池的运用
- 匈牙利算法详解
- 奇怪的电梯
- sublime text编辑器html页面预览
- RBAC权限
- POJ 2488 A Knight's Journey
- 程序上传
- PKU 3259 Wormholes 最短路 bellman
- LinkedList学习笔记