别new Thread(),简单实现线程管理ThreadManager

640 阅读1分钟

直接开车......

直接上代码,ThreadManager类

public class ThreadManager {
    
    //获取内核数量
    private final static int NUMBER_OF_CORES = Runtime.getRuntime().availableProcessors();

    private final static ThreadPoolExecutor mDefFixThreadPool;
    private final static ThreadPoolExecutor mDefCacheThreadPool;
    private final static ExecutorService    mDefSingleThreadPool;

    static {
        mDefFixThreadPool = (ThreadPoolExecutor) Executors.newFixedThreadPool(NUMBER_OF_CORES * 2);
        mDefCacheThreadPool = (ThreadPoolExecutor) Executors.newCachedThreadPool();
        mDefSingleThreadPool = Executors.newSingleThreadExecutor();
    }

    public static ThreadPoolExecutor getDefFixThreadPool() {
        return mDefFixThreadPool;
    }

    public static ThreadPoolExecutor getDefCacheThreadPool() {
        return mDefCacheThreadPool;
    }

    public static ExecutorService getDefSingleThreadPool() {
        return mDefSingleThreadPool;
    }
}

就这么简单实现,总比每次都new Thread()好,节省系统资源。

简单使用如下:

public class ThreadTest {
    private static int count;

    public static void main(String[] args) throws java.lang.Exception {

        //CacheThreadPool简单使用
        for (int i = 0; i < 20; i++) {
            ThreadManager.getDefCacheThreadPool().execute(new Runnable() {
                @Override
                public void run() {
                    //do work
                    count++;
                    System.out.println(count);
                    System.out.println("ActiveCount:"+ThreadManager.getDefCacheThreadPool().getActiveCount());
                }
            });
        }
        //
        //FixThreadPool简单使用
        //for (int i = 0; i < 10; i++) {
        //    ThreadManager.getDefFixThreadPool().execute(new Runnable() {
        //        @Override
        //        public void run() {
        //            //do work
        //            count++;
        //            System.out.println(count);
        //            System.out.println("ActiveCount:"+ThreadManager.getDefFixThreadPool().getActiveCount());
        //        }
        //    });
        //}


        //SingleThreadPool简单使用
        // for (int i = 0; i < 10; i++) {
        //    ThreadManager.getDefSingleThreadPool().execute(new Runnable() {
        //        @Override
        //        public void run() {
        //            //do work
        //            count++;
        //            System.out.println(count);
        //        }
        //    });
        //}
    }
}