四使用線程池
如前所提及在線程完成執行時它們將被JVM殺死而分配給它們的內存將被垃圾回收機制所回收不斷地創建和毀滅線程所帶來的麻煩是它浪費了時鐘周期因為創建線程確實耗費額外的時間一個通用的且最好的實現是在程序運行的早期就分配一組線程(稱為一個線程池)然後在這些線程可用時再使用它們通過使用這種方案在創建時分配給一個線程指定的功能就是呆在線程池中並且等待分配一項工作然後當分配的工作完成時該線程被返回到線程池
JSE 引入了javautilconcurrent包它包括了一個預先構建的線程池框架這大大便利了上述方法的實現有關Java線程池的更多信息及一部教程
在設計線程程序和線程池時自然出現關於應該創建多少線程的問題答案看你怎樣計劃使用這些線程如果你基於分離的任務來用線程劃分工作那麼線程的數目等於任務的數目例如一個字處理器可能使用一個線程用於顯示(在幾乎所有系統中的主程序線程負責更新用戶接口)一個用於標記文檔第三個用於拼寫檢查而第四個用於其它後台操作在這種情況中創建四個線程是理想的並且它們提供了編寫該類軟件的一個很自然的方法
然而如果程序象早些時候所討論的那個一樣使用多個線程來做類似的工作那麼線程的最佳數目將是系統資源的反映特別是處理器上可執行管道的數目和處理器的數目的反映在采用英特爾處理器超線程技術(HT技術)的系統上當前在每個處理器核心上有兩個執行管道最新的多核心處理器在每個芯片上有兩個處理器核心英特爾指出將來的芯片有可能具有多個核心大部分是因為額外的核心會帶來更高的性能而不會從根本上增加熱量或電量的消耗因此管道數將會越來越多
照上面這些體系結構所作的算術建議在一個雙核心Pentium 處理器系統上可以使用四條執行管道並因此可以使用四個線程將會提供理想的性能在一個雙處理器英特爾Xeon?處理器的工作站上理想的線程數目是因為目前Xeon芯片提供HT技術但是沒提供多核心模型你可以參考下面文檔來了解這些新型處理器上的執行管道的數目
五小結
你當在平台上運行線程化的Java程序時你將可能想要監控在處理器上的加載過程與線程的執行最好的獲得這些數據與管理JVM怎樣處理並行處理的JVM之一是BEA的WebLogic JRockitJRockit還有其它一些由來自於BEA和Intel公司的工程師專門為Intel平台設計和優化的優點
不考慮你使用哪一種JVMIntel的VTune Performance Analyzer將會給你一個關於JVM怎樣執行你的代碼的很深入的視圖這包括每個線程的性能瓶頸等另外Intel還提供了關於如何在Java環境下使用VTune Performance Analyzer的白皮書[PDF MB]
總之本文提供了線程在Java平台工作機理的分析由於Intel還將繼續生產HT技術的處理器並且發行更多的多核心芯片所以想從這些多管道中得到性能效益的壓力也會增加並且由於核心芯片數目的增加管道的數目也將相應地增加唯一的利用它們的優點的辦法就是使用多線程技術如在本文中所討論的並且Java多線程程序的優勢也越來越明顯
[] [] [] []
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27729.html