java.util.concurrent 學習筆記---線程池模塊

     廣義上的完整線程池可能還包括Thread/Runnable、Timer/TimerTask等部分。這裏只介紹主要的和高級的API和類。ThreadPool2_2.png (1024×513)工具

 

 

Executor-class_2.png (811×765)

            Executors

            此類是個工具類(工廠類),它提供對Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 類的一些實用方法。spa

            對ExecutorService類的初始化線程

             ExecutorService newCachedThreadPool()htm

                初始化0個線程,最大線程數爲Integer.MAX_VALUEget

             ExecutorService   newCachedThreadPool(ThreadFactory threadFactory)it

                      初始化0個線程,最大線程數爲Integer.MAX_VALUEio

             ExecutorService newFixedThreadPool(int nThreads) :class

                    建立大小固定的線程執行者(初始化nThreads個線程,最大線程數爲nThreads)thread

             ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory):配置

                    建立大小固定的線程執行者(初始化nThreads個線程,最大線程數爲nThreads)

            ExecutorService newSingleThreadExecutor():

                    建立一個線程執行者(初始化1個線程,最大線程數爲1)

            ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory):

                     建立一個線程執行者(初始化1個線程,最大線程數爲1)

            

            ScheduledExecutorService newScheduledThreadPool(int corePoolSize)

                    建立一個調度任務線程執行者

            ScheduledExecutorService newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory)

                    建立一個調度任務線程執行者

            AbstractExecutorService

            <T> Future<T> submit(Callable<T> task):

                    提交一個 Callable任務用於執行,並返回一個表示該任務的 Future。

             Future<?> submit(Runnable task)

                    提交一個 Runnable任務用於執行,並返回一個表示該任務的 Future。

            <T> Future<T> submit(Runnable task, T result)

                    提交一個 Runnable任務用於執行,並返回一個表示該任務的 Future。

            <T> T invokeAny(Collection<? extends Callable<T>> tasks)

                    執行給定的任務,若是某個任務已成功完成(也就是未拋出異常),則返回其結果。一旦正常或異常返回後,則取消還沒有完成的任務。若是此操做正在進行時修改了給定的集合,則此方法的結果是不明確的。

            <T> T invokeAny(Collection<? extends Callable<T>> tasks,
                       long timeout, TimeUnit unit)

                    執行給定的任務,若是某個任務已成功完成(也就是未拋出異常),則返回其結果。一旦正常或異常返回後,則取消還沒有完成的任務。若是此操做正在進行時修改了給定的集合,則此方法的結果是不明確的。(此方法執行全部任務,並返回第一個完成(未超時)且沒有拋出異常的任務的結果)

         <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)

                    執行給定的任務,當全部任務完成時,返回保持任務狀態和結果的 Future 列表。返回列表的全部元素的 Future.isDone() 爲 true。注意,能夠正常地或經過拋出異常來終止已完成 任務。若是正在進行此操做時修改了給定的集合,則此方法的結果是不明確的。

        <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
                                     long timeout, TimeUnit unit)

                此方法執行全部任務,當它們所有完成且未超時,返回它們的執行結果。

            ThreadPoolExecutor 類

            此類是線程池類,

            經常使用方法:

            void execute(Runnable command)

            關閉線程池

            void shutdown()            

            List<Runnable> shutdownNow()

            boolean isTerminated():若是你已經調用shutdown()或shutdownNow()方法,而且執行者完成關閉它的處理時,此方法返回true。

              boolean isShutdown():若是你在執行者中調用shutdown()方法,此方法返回true。

              boolean awaitTermination(long timeout, TimeUnit unit):此方法阻塞調用線程,直到執行者的任務結束或超時

            狀態類

            int getPoolSize():此方法返回線程池實際的線程數

            int getActiveCount():此方法返回在執行者中正在執行任務的線程數

            int getCompletedTaskCount():此方法返回執行者完成的任務數

            int getLargestPoolSize():此方法,返回池中某一時刻最大的線程數

 

            boolean awaitTermination(long timeout, TimeUnit unit)

                    等待線程執行完畢
                 

 

            ScheduledThreadPoolExecutor 

                給定的延遲後運行命令,或者按期執行命令。須要多個輔助線程時,或者要求 ThreadPoolExecutor 具備額外的靈活性或功能時,此類要優於 Timer。

                

         ScheduledFuture<?> schedule(Runnable command,long delay,TimeUnit unit)

               在給定的延遲後,建立和執行Runnabel。

         ScheduledFuture<V> schedule(Callable<V> callable,long delay,TimeUnit unit) 

                        在給定的延遲後,建立和執行Callable。

            void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value):

                    當你調用shutdown()方法時,而且有待處理的任務正在等待它們延遲結束。默認的行爲是,無論執行者是否結束這些任務都將被執行,使用false,調用 shutdown()時,待處理的任務不會被執行。

            

 

            ScheduledFuture<?> scheduleAtFixedRate(Runnable command,long initialDelay,long period,TimeUnit unit)

                    週期性的執行任務(你想要週期性執行的任務、第一次執行任務的延遲時間、兩次執行之間的間隔期間、第二、3個參數的時間單位)

            ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,long initialDelay,long delay,TimeUnit unit) 

                    在任務結束後固定的時間週期性執行任務(你想要週期性執行的任務、第一次執行任務的延遲時間、參數決定任務執行結束與下次執行開始之間的一段時間、第二、3個參數的時間單位)           

   

            void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)

                    當你使用 shutdown()方法時,你也能夠經過參數配置一個SeduledThreadPoolExecutor的行爲。shutdown()方法默認的行爲是,當你調用這個方法時,計劃任務就結束。 你能夠使用ScheduledThreadPoolExecutor類的 setContinueExistingPeriodicTasksAfterShutdownPolicy()方法設置true值改變這個行爲。在調用 shutdown()方法時,週期性任務將不會結束。