java线程池共有类的使用

  在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);
                }
            }
        }
    }

}

 

posted @ 2018-11-14 10:57  冰丶丿小墨  阅读(638)  评论(0编辑  收藏  举报