在java项目的开发过程中,我们会经常使用到线程池来进行对线程的使用和管理,对于线程池的原理以及使用方式,大家可以参考这两篇文章:
https://www.cnblogs.com/dolphin0520/p/3932921.html
https://www.cnblogs.com/aaron911/p/6213808.html
在使用的过程中,起初都是需要使用线程池的时候,新建线程池,使用,最后销毁,这样使用的话,每次新建线程池会消耗资源,而且代码会重复使用,所以
就书写了,一个线程池的共有类,使用的时候,直接调用即可,代码如下:
package cn.ice.snow.threadPool; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** * 线程池共有工具类 * @author iceSnow * @date 2018-07-19 */ public class CustomThreadPoolExecutors { private static ExecutorService executor = null; private final static Integer MAX_THREAD_COUNT = 100; /** * 私有构造函数,保证此类不能被实例化 */ private CustomThreadPoolExecutors(){ } /** * 获得线程池executor * @return */ public static ExecutorService getExecutor(){ return executor; } /** * 无返回值执行方法 * @param task */ public static void execute(Runnable task){ checkExecutor(); if(task != null){ executor.execute(task); } } /** * 有返回值执行方法 * @param task * @param <T> * @return */ public static <T> Future<T> submit(Runnable task){ checkExecutor(); if(task != null){ Future<T> future = (Future<T>) executor.submit(task); return future; } return null; } /** * 任务执行结束后,释放线程池资源 */ public static void shutdown(){ if(executor != null){ executor.shutdown(); } } /** * 释放线程池资源,并终止所有任务 */ public static void shutdownNow(){ if(executor != null){ executor.shutdownNow(); } } /** * 检测executor是否存在,不存在则新建 */ private static void checkExecutor(){ // 如果线程池为空或者线程池已经关闭,需要新建线程池 if(executor == null || executor.isShutdown()){ //使用双重判定,保证线程安全 synchronized (CustomThreadPoolExecutors.class){ if(executor == null || executor.isShutdown()){ // 默认为定长线程池 //executor = Executors.newCachedThreadPool(); executor = Executors.newFixedThreadPool(MAX_THREAD_COUNT); } } } } }