Android 线程池

    xiaoxiao2021-03-25  90

    今天我在原来的公司离职了,以后我还是会继续努力加油工作!

    import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /**  * 管理线程池  *   * @author itcast  *   */ public class ThreadManager { private ThreadManager() { } //线程池管理者实例 private static ThreadManager instance = new ThreadManager();

    public static ThreadManager getInstance() { return instance; }

    private ThreadPoolProxy longPool; //多线程的线程池 private ThreadPoolProxy shortPool; //线程的线程池 //一个线程池管理者可以new 多个线程池 // 联网比较耗时,本线程池可以用于联网操作 // 一般new几个线程=cpu的核数*2+1 public synchronized ThreadPoolProxy createLongPool() { if (longPool == null) {    //先开5个线程,不够用再开5个,如果线程池没有要执行的任务 存活5s longPool = new ThreadPoolProxy(5, 5, 5000L); } return longPool; } // 操作本地文件的线程池    synchronized 加锁,让线程同步 public synchronized ThreadPoolProxy createShortPool() { if(shortPool==null){ //先开3个线程,不够用再开3个,如果线程池没有要执行的任务 存活5s shortPool = new ThreadPoolProxy(3, 3, 5000L);//L是long类型的后缀 } return shortPool; } //内部类,用于创建线程池 public class ThreadPoolProxy {

    // ThreadPoolExecutor 是Java提供的线程池 private ThreadPoolExecutor pool; private int corePoolSize; private int maximumPoolSize; private long time; //构造函数,里面的参数是ThreadPoolExecutor的参数 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); // 取消异步任务 } } } }

    在主函数中的调用:

    ThreadManager.getInstance().createLongPool().execute(new Runnable() { @Override public void run() { //执行耗时操作!

    } });

    转载请注明原文地址: https://ju.6miu.com/read-22852.html

    最新回复(0)