线程池工具类测试可以用
时间:2021-11-10 作者:匿名
import 域名域名utors; import 域名域名edBlockingDeque; import 域名域名adPoolExecutor; import 域名域名Unit; public class ThreadPoolManager { public static ThreadPool instance; // 获取单例的线程池对象 public static ThreadPool getInstance() { if (instance == null) { synchronized (域名s) { if (instance == null) { int cpuNum = 域名untime().availableProcessors();// 获取处理器数量 int threadNum = cpuNum * 2 + 1;// 根据cpu数量,计算出合理的线程并发数 instance = new ThreadPool(threadNum - 1, threadNum, 域名VALUE);//默认是双核的cpu 每个核心走一个线程 一个等待线程 } } } return instance; } public static class ThreadPool { private ThreadPoolExecutor mExecutor; private int corePoolSize; private int maximumPoolSize; private long keepAliveTime; private ThreadPool(int corePoolSize, int maximumPoolSize, long keepAliveTime) { 域名PoolSize = corePoolSize; 域名mumPoolSize = maximumPoolSize; 域名AliveTime = keepAliveTime; } public void execute(Runnable runnable) { if (runnable == null) { return; } if (mExecutor == null) { mExecutor = new ThreadPoolExecutor(corePoolSize,// 核心线程数 maximumPoolSize, // 最大线程数 keepAliveTime, // 闲置线程存活时间 域名ISECONDS,// 时间单位 new LinkedBlockingDeque<Runnable>(域名VALUE),// 线程队列 域名ultThreadFactory(),// 线程工厂 new 域名tPolicy() {// 队列已满,而且当前线程数已经超过最大线程数时的异常处理策略 @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { 域名ctedExecution(r, e); } } ); } 域名ute(runnable); } // 从线程队列中移除对象 public void cancel(Runnable runnable) { if (mExecutor != null) { 域名ueue().remove(runnable); } } } }