import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadFactory;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;public class ThreadPoolManager {    private static ThreadPoolManager mInstance;    private int corePoolSize;    /**     * 最大线程池数量,表示当缓冲队列满的时候能继续容纳的等待任务的数量     */    private int maximumPoolSize;    /**     * 存活时间     */    private long keepAliveTime = 1;    private TimeUnit unit = TimeUnit.HOURS;    private ThreadPoolExecutor executor;    // 缓冲队列    private static BlockingQueue workQueue = null;    public static ThreadPoolManager getInstance() {        if (mInstance == null){            synchronized (ThreadPoolManager.class){                if (mInstance == null){                    mInstance = new ThreadPoolManager();                    mInstance.init();                }            }        }        return mInstance;    }    private void init(){        //给corePoolSize赋值:当前设备可用处理器核心数*2 + 1,能够让cpu的效率得到最大程度执行(有研究论证的)        corePoolSize = Runtime.getRuntime().availableProcessors() * 2 + 1;        maximumPoolSize = corePoolSize;        workQueue = new LinkedBlockingQueue(100);        executor = new ThreadPoolExecutor(                //当某个核心任务执行完毕,会依次从缓冲队列中取出等待任务                corePoolSize,                //5,先corePoolSize,然后new LinkedBlockingQueue(),然后maximumPoolSize,但是它的数量是包含了corePoolSize的                maximumPoolSize,                //表示的是maximumPoolSize当中等待任务的存活时间                keepAliveTime,                unit,                //缓冲队列,用于存放等待任务,Linked的先进先出//                new LinkedBlockingQueue(),                workQueue,                //创建线程的工厂                //  Executors.defaultThreadFactory(),                new DefaultThreadFactory(Thread.NORM_PRIORITY, "tiaoba-pool-"),                //用来对超出maximumPoolSize的任务的处理策略                new ThreadPoolExecutor.AbortPolicy()        );    }    private static class DefaultThreadFactory implements ThreadFactory {        /**         * 线程池的计数         */        private static final AtomicInteger poolNumber = new AtomicInteger(1);        /**         * 线程的计数         */        private final AtomicInteger threadNumber = new AtomicInteger(1);        private final ThreadGroup group;        private final String namePrefix;        private final int threadPriority;        DefaultThreadFactory(int threadPriority, String threadNamePrefix) {            this.threadPriority = threadPriority;            //默认线程组            this.group = Thread.currentThread().getThreadGroup();            namePrefix = threadNamePrefix + poolNumber.getAndIncrement() + "-thread-";        }        @Override        public Thread newThread(Runnable r) {            Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0);            //isDaemon() 测试该线程是否为守护线程            if (t.isDaemon()) {                t.setDaemon(false);            }            t.setPriority(threadPriority);            return t;        }    }    public void execute(Runnable runnable) {        if (executor == null){            init();        }        if (runnable != null){            executor.execute(runnable);        }    }}

 

更多相关文章

  1. Android(安卓)Json解析
  2. contentProvider不是线程安全的
  3. Android线程间通信
  4. 阿里、腾讯、百度、网易、美团Android面试经验分享,拿到了百度、
  5. 2020年GitHub标星2.9K的Android基础——高级面试题合集!(金九银十
  6. android杀不死的Service
  7. android开发之widget控件突然停止更新的原因
  8. Android开发规范之编码规范
  9. 2018-6月Android试题整理

随机推荐

  1. Android开发随想:iPhone和Android之间的对
  2. android高仿小视频、应用锁、3种存储库、
  3. 如何使android应用程序使用当前的主题样
  4. Android中IPC框架的理解
  5. Android SDK 2.0安装、配置图文教程
  6. android开发每日汇总【2011-11-26】
  7. Android使用addView动态添加组件
  8. android小说阅读源码、bilibili源码、MVP
  9. android:screenOrientation属性(转)
  10. 连线:纯正Android已死 “Android兼容设备