天天看點

使用線程池優化多線程程式設計

   Java中的對象是使用new操作符建立的,如果建立大量短生命周期的對象,這種方式性能非常低下。為了解決這個問題,而發明了池技術。

對于資料庫連接配接有連接配接池,對于線程則有線程池。

本執行個體介紹兩種方式建立1000個短生命周期的線程,第一種是普通方式,第二種是線程池的方式。通過時間和記憶體消耗的對比,就可以很明顯地看出線程池的優勢。

執行個體結果如下:

使用線程池優化多線程程式設計

說明:使用線程池建立對象的時間是15毫秒,說明線程池是非常高效的。

關鍵技術:

     Executors類為java.util.concurrent包中所定義的Executor、ExecutorService、ScheduleExecutorService、ThreadFactory和Callable類提供工廠方法和實用方法。該類支援以下各種方法:

 (a)建立并傳回設定有常用配置字元串的ExecutorService方法。

 (b)建立并傳回設定有常用配置字元串的ScheduleService方法。

 (c)建立并傳回“包裝的”ExecutorService方法,它通過使特定于實作的方法不可以通路來禁用 從新配置。

 (d)建立并傳回ThreadFactory方法,它可以将建立的線程設定為已知的狀态。

 (e)建立并傳回非閉包形式的Callable方法,這樣可将其用于需要Callable的執行方法中。

    本執行個體使用newFixedThreadPool()方法,建立一個可重用固定線程數的線程池,它以共享的無解隊列方式來運作這些線程。該方法的聲明如下:

        public static ExecutorService newFixedThreadPool(int nThreads)

    參數說明: nThreads為池中的線程池。

設計過程:

  1)編寫類TempThread,該類實作了Runnable接口。在run()方法中,進行簡單的自增運算,代碼如下:

  2)編寫類ThreadPoolTest進行測試,在main()方法中,使用兩種方式建立1000個線程,分别輸出了建立時間和占用的記憶體。代碼如下:

繼續閱讀