package com.hl.account; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; /** * 线程池管理类 * * @author changcsw 2015-11-6 * */ public final class ThreadPoolManager { // 获取CPU private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); // 线程池中最少的线程的数量 private static final int CORE_POOL_SIZE = (CPU_COUNT + 1) > 3 ? (CPU_COUNT + 1) : 3; // 线程池中最多的线程的数量 private static final int MAXIMUM_POOL_SIZE = (CPU_COUNT > 1) ? (CPU_COUNT * 2 + 1) : 5; // 空闲线程的最长存活时间 private static final long KEEP_ALIVE = 1L; // 工作队列-阻塞队列 private static final BlockingQueue WORK_QUEUE = new LinkedBlockingQueue(128); // 线程池中线程的创建工厂 private static final ThreadFactory THREAD_FACTORY = new ThreadFactory() { // 原子操作级别的整数,初始值是1 private final AtomicInteger mCount = new AtomicInteger(1); @Override public Thread newThread(Runnable r) { Thread thread = new Thread(r, "Thread #" + mCount.getAndIncrement()); // 线程名,前缀固定,后缀自增长 thread.setPriority(Thread.NORM_PRIORITY); // 正常优先级 return thread; } }; /************************************** 线程池中线程的执行的管理器 ******************************************/ // 普通的任务用这个执行器, 缺点:当没有任务是还会CORE_POOL_SIZE个线程占用资源,优点:无需频繁调度 public static final ExecutorService EXECUTOR = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, TimeUnit.SECONDS, WORK_QUEUE, THREAD_FACTORY, new ThreadPoolExecutor.DiscardPolicy()); // 有新的任务就开启新的线程,当没有新任务时会自动回收线程,缺点:频繁调度, 优点:快速处理任务 public static final ExecutorService CACHED_EXECUTOR = new ThreadPoolExecutor(CORE_POOL_SIZE, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue(), THREAD_FACTORY, new ThreadPoolExecutor.DiscardOldestPolicy()); // 当有计划的执行一个任务时用,如检查版本更新, public static final ScheduledExecutorService SCHEDULED_EXECUTOR = new ScheduledThreadPoolExecutor(CORE_POOL_SIZE, THREAD_FACTORY, new ThreadPoolExecutor.DiscardPolicy()); /************************************** 线程池中线程的执行的管理器 ******************************************/ }