android开发中,难免会创建很多线程,如果线程管理不好,容易引发很多问题,为大家推荐一个线程管理工具类,也是我一直使用的。
package com.zwhy.touyuan.manager; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * 线性管理类 */ public class ThreadManager { //1,创建一个线程的管理者的代理对象(代理模式) private static ThreadProxyPool threadProxyPool; private static Object object = new Object(); //2,创建线程池代理管理者对象 public static ThreadProxyPool getThreadProxyPool(){ synchronized (object) { if(threadProxyPool == null){ threadProxyPool = new ThreadProxyPool(3, 5, 5L); } } return threadProxyPool; } /** * 用于执行线程中的任务,以及管理线程 */ public static class ThreadProxyPool{ private int corePoolSize; private int maximumPoolSize; private long keepAliveTime; private ThreadPoolExecutor threadPoolExecutor; public ThreadProxyPool(int corePoolSize,int maximumPoolSize,long keepAliveTime){ this.corePoolSize = corePoolSize; this.maximumPoolSize = maximumPoolSize; this.keepAliveTime = keepAliveTime; } /** * 将线程中需要执行的代码封装到任务中,然后给此方法执行 * @param runnable */ public void execute(Runnable runnable){ if(runnable!=null){ if(threadPoolExecutor == null || threadPoolExecutor.isShutdown()){ threadPoolExecutor = new ThreadPoolExecutor( //核心线程数 corePoolSize, //3 //最大线程数 maximumPoolSize, //5 //线程在空闲的最大存活时间 keepAliveTime, //5 //线程存活时间单位 TimeUnit.MILLISECONDS,//毫秒 //任务队列 new LinkedBlockingQueue<Runnable>(), //线程工程 Executors.defaultThreadFactory()); } threadPoolExecutor.execute(runnable); } } /** * 将任务传递进来,将还在任务队列中排队的任务移除方法 * @param runnable 需要移除的任务 */ public void cancelRunnable(Runnable runnable) { //判断线程对象是否存在,是否正在运行 if(runnable!=null){ if(threadPoolExecutor!=null && !threadPoolExecutor.isShutdown()){ //获取线程池中排队的任务队列,移除任务 threadPoolExecutor.getQueue().remove(runnable); } } } } }