package com.gz.mydemo;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.Callable;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;/** * Created by malei on 2018/9/30. */public class ThreadPoolManager {    /**     * 根据cpu的数量动态的配置核心线程数和最大线程数     */    private static final int CPU_COUNT         = Runtime.getRuntime().availableProcessors();    /**     * 核心线程数 = CPU核心数 + 1     */    private static final int CORE_POOL_SIZE    = CPU_COUNT + 1;    /**     * 线程池最大线程数 = CPU核心数 * 2 + 1     */    private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;    /**     * 非核心线程闲置时超时1s     */    private static final int KEEP_ALIVE        = 1;    /**     *  线程池的对象     */    private ThreadPoolExecutor executor;    /**     * 要确保该类只有一个实例对象,避免产生过多对象消费资源,所以采用单例模式     */    private ThreadPoolManager() {    }    private static ThreadPoolManager sInstance;    public synchronized static ThreadPoolManager getsInstance() {        if (sInstance == null) {            sInstance = new ThreadPoolManager();        }        return sInstance;    }    /**     * 开启一个无返回结果的线程     * @param r     */    public void execute(Runnable r) {        if (executor == null) {            /**             * corePoolSize:核心线程数             * maximumPoolSize:线程池所容纳最大线程数(workQueue队列满了之后才开启)             * keepAliveTime:非核心线程闲置时间超时时长             * unit:keepAliveTime的单位             * workQueue:等待队列,存储还未执行的任务             * threadFactory:线程创建的工厂             * handler:异常处理机制             *             */            executor = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE,                    KEEP_ALIVE, TimeUnit.SECONDS, new ArrayBlockingQueue(20),                    Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());        }        // 把一个任务丢到了线程池中        executor.execute(r);    }    /**     * 开启一个有返回结果的线程     * @param r     * @return     */    public Future submit(Callable r) {        if (executor == null) {            /**             * corePoolSize:核心线程数             * maximumPoolSize:线程池所容纳最大线程数(workQueue队列满了之后才开启)             * keepAliveTime:非核心线程闲置时间超时时长             * unit:keepAliveTime的单位             * workQueue:等待队列,存储还未执行的任务             * threadFactory:线程创建的工厂             * handler:异常处理机制             *             */            executor = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE,                    KEEP_ALIVE, TimeUnit.SECONDS, new ArrayBlockingQueue(20),                    Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());        }        // 把一个任务丢到了线程池中        return executor.submit(r);    }    /**     * 把任务移除等待队列     * @param r     */    public void cancel(Runnable r) {        if (r != null) {            executor.getQueue().remove(r);        }    }}

 

更多相关文章

  1. Android(安卓)DOC翻译—Processes and Threads
  2. Android(安卓)Json解析
  3. 自定义线程池管理类
  4. contentProvider不是线程安全的
  5. Android线程间通信
  6. 阿里、腾讯、百度、网易、美团Android面试经验分享,拿到了百度、
  7. 2020年GitHub标星2.9K的Android基础——高级面试题合集!(金九银十
  8. android杀不死的Service
  9. android 系统核心机制binder(06)binder C++层 TestClient分析

随机推荐

  1. [Android面试题-3] Activity的四种加载模
  2. Plugin-X Integration Guide for Android
  3. Google Android尝鲜 - 计算器小程序
  4. View高度动画
  5. android:如何开启webview的LBS功能
  6. android OpenGL es lession6
  7. Android模拟器获取IP的方法
  8. android graphic(13)—surface flinger中
  9. android APK包 反编译
  10. Activity的“伪对话框”