package com.king.tv.thread; import java.util.concurrent.BlockingDeque; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * @author Jenly <a href="mailto:jenly1314@gmail.com">Jenly</a> * @since 2017/3/13 */ public class ThreadPoolManager { private static ThreadPoolProxy mInstance; public static ThreadPoolProxy getInstance(){ if(mInstance == null){ synchronized (ThreadPoolManager.class){ if(mInstance == null){ mInstance = new ThreadPoolProxy(2,5); } } } return mInstance; } /** * 线程池代理 */ public static class ThreadPoolProxy{ private ThreadPoolExecutor mThreadPoolExecutor; public ThreadPoolProxy(int corePoolSize, int maximumPoolSize){ initThreadPoolExecutor(corePoolSize,maximumPoolSize); } private void initThreadPoolExecutor(int corePoolSize, int maximumPoolSize){ if(mThreadPoolExecutor == null){ // ExecutorService executorService = Executors.newFixedThreadPool(3); //阻塞缓冲队列 BlockingDeque<Runnable> workQueue = new LinkedBlockingDeque<>(); //线程工厂 ThreadFactory threadFactory = Executors.defaultThreadFactory(); //拒绝任务处理策略(抛弃旧的任务) RejectedExecutionHandler handler = new ThreadPoolExecutor.DiscardPolicy(); mThreadPoolExecutor = new ThreadPoolExecutor(corePoolSize,maximumPoolSize,0, TimeUnit.MICROSECONDS,workQueue,threadFactory,handler); } } public void submit(Runnable task){ if(mThreadPoolExecutor!=null){ mThreadPoolExecutor.submit(task); } } public void execute(Runnable task){ if(mThreadPoolExecutor!=null){ mThreadPoolExecutor.execute(task); } } public void remove(Runnable task){ if(mThreadPoolExecutor!=null){ mThreadPoolExecutor.remove(task); } } } }