java Executors工具類的相關方法使用創建

通過Executors類創建線程池

線程池的創建方式有很多種,可以通過Executors工具類創建多種模式的線程池,Executors工具類位於java.util.concurrent.locks包中,接下來解釋其中的方法。

首先將線程池的七個參數標在這裡: corePoolSize:表示線程池中核心線程的數量;

maximumPoolSize:表示線程池中最大線程數量;

keepAliveTime:針對救急線程的存活時間的變量,就是當線程數量超過線程池中的核心數量時,如果沒有新的任務被提交,那麼核心線程外的救急線程就會保持在keepAliveTime變量值之後被銷毀,而不是立即銷毀;

unit:也是針對救急線程,表示keepAliveTime的核心單位;

workQueue:表示線程池中的阻塞隊列,阻塞隊列中存儲著等待執行的任務;

threadFactory:表示用來創建線程的線程工廠。創建線程池的時候,默認的線程工廠創建的線程具有相同的優先級,可以為線程起一個好名字;

handler:表示線程池的拒絕策略。當線程池中的阻塞隊列滿瞭的時候,線程數maximumPoolSize也達到瞭最大值,如果此時再有任務提交到線程池,線程池就會采取策略來拒絕任務的執行。

🎆newCachedThreadPool方法

調用Executors工具類的newCachedThreadPool方法可以創建一個可緩存的線程池,核心線程數為0,當線程池中的線程數量超過瞭運行任務所需要的線程數,那麼可以回收空閑的線程,默認每60s回收;同時當任務增加的時候,線程池又可以創建新的線程來處理任務。

    public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }
    public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>(),
                                      threadFactory);
    }

🎊newFixThreadPool方法

調用Executors工具類的newFixThreadPool方法可以創建一個固定長度大小的線程池,線程池中的線程都是核心線程,也就是創建的線程池中的線程數量是固定的,能夠控制線程池的最大並發數。

當向線程池提交任務時,如果線程池中有空閑的線程則會直接執行任務,如果沒有空閑線程則會將任務放入阻塞隊列中等待,有空閑線程的時候再去執行阻塞隊列中的線程。

當線程池達到最大線程數時,線程數量會保持不變,一旦某個線程出現異常,線程池會補充一個線程。提交到線程池的任務過多可能會導致內存溢出。

    public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>(),
                                      threadFactory);
    }

🎍newScheduledThreadPool方法

調用Executors工具類的newScheduledThreadPool方法可以創建一個可以周期性執行任務的線程池,也能夠定時執行任務。

    public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
        return new ScheduledThreadPoolExecutor(corePoolSize);
    }
    public static ScheduledExecutorService newScheduledThreadPool(
            int corePoolSize, ThreadFactory threadFactory) {
        return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);
    }

🎠newSingleThreadExecutor方法

調用Executors工具類的newSingleThreadExecutor方法可以創建隻有一個工作線程的線程池,相當於隻有一個線程在工作。能夠保證任務按照先進先出的順序,或者優先級順序執行任務。就像單線程在串行執行任務一樣,但是也有些區別,如果這個唯一的線程出現瞭異常,線程池會創建一個新的線程來代替它。

   public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>(),
                                    threadFactory));
    }

🎡newSingleThreadScheduledExecutor方法

調用Executors工具類的newSingleThreadScheduledExecutor方法可以創建隻有一個工作線程,並且支持定時,周期性執行任務的線程池。

    public static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory) {
        return new DelegatedScheduledExecutorService
            (new ScheduledThreadPoolExecutor(1, threadFactory));
    }

🎁newWorkStealingPool方法

調用Executors工具類的newSingleThreadExecutor方法可以創建一個具有並行級別的線程池,這是jdk 1.8新增的方法,可以為線程池設置並行級別,通過使用多個隊列來減少競爭,需要傳遞一個並行級別的參數。

    public static ExecutorService newWorkStealingPool(int parallelism) {
        return new ForkJoinPool
            (parallelism,
             ForkJoinPool.defaultForkJoinWorkerThreadFactory,
             null, true);
    }

以上就是java Executors工具類的相關方法使用創建的詳細內容,更多關於java Executors工具類的資料請關註WalkonNet其它相關文章!

推薦閱讀: