<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    江蘇520

    江蘇520

    常用鏈接

    統計

    最新評論

    java多線程問題及處理(筆記)

    1.死鎖
             多線程編程在實際的網絡程序開發中,在客戶端程序實現中使用的比較簡單,但是在服務器端程序實現中卻不僅是大量使用,而且會出現比客戶端更多的問題。

             另外一個容易在服務器端出現的多線程問題是——死鎖。死鎖指兩個或兩個以上的線程為了使用某個臨界資源而無限制的等待下去。還是以前面衛生間的例子來說明死鎖,例如兩個人都同時到達衛生間,而且兩個人都比較禮貌,第一個人和第二個人說:你先吧,第二個人和第一個人說:你先吧。這兩個人就這樣一直在互相禮讓,誰也不進入,這種現象就是死鎖。這里的兩個人就好比是線程,而衛生間在這里就是臨界資源,而由于這兩個線程在一直謙讓,誰也不使用臨界資源。

             死鎖不僅使程序無法達到預期實現的功能,而且浪費系統的資源,所以在服務器端程序中危害比較大,在實際的服務器端程序開發中,需要注意避免死鎖。

             而死鎖的檢測比較麻煩,而且不一定每次都出現,這就需要在測試服務器端程序時,有足夠的耐心,仔細觀察程序執行時的性能檢測,如果發現執行的性能顯著降低,則很可能是發生了死鎖,然后再具體的查找死鎖出現的原因,并解決死鎖的問題。

             死鎖出現的最本質原因還是邏輯處理不夠嚴謹,在考慮時不是很周全,所以一般需要修改程序邏輯才能夠很好的解決死鎖。

    2. 線程優先級
             在日常生活中,例如火車售票窗口等經常可以看到“XXX優先”,那么多線程編程中每個線程是否也可以設置優先級呢?

             在多線程編程中,支持為每個線程設置優先級。優先級高的線程在排隊執行時會獲得更多的CPU執行時間,得到更快的響應。在實際程序中,可以根據邏輯的需要,將需要得到及時處理的線程設置成較高的優先級,而把對時間要求不高的線程設置成比較低的優先級。

             在Thread類中,總計規定了三個優先級,分別為:

    l  MAX_PRIORITY——最高優先級

    l  NORM_PRIORITY——普通優先級,也是默認優先級

    l  MIN_PRIORITY——最低優先級

    在前面創建的線程對象中,由于沒有設置線程的優先級,則線程默認的優先級是NORM_PRIORITY,在實際使用時,也可以根據需要使用Thread類中的setPriority方法設置線程的優先級,該方法的聲明為:

             public final void setPriority(int newPriority)

    假設t是一個初始化過的線程對象,需要設置t的優先級為最高,則實現的代碼為:

             t. setPriority(Thread. MAX_PRIORITY);

    這樣,在該線程執行時將獲得更多的執行機會,也就是優先執行。如果由于安全等原因,不允許設置線程的優先級,則會拋出SecurityException異常。

    下面使用一個簡單的輸出數字的線程演示線程優先級的使用,實現的示例代碼如下:

             package priority;

    /**

     * 測試線程優先級

    * author by http://www.bt285.cn http://www.5a520.cn

     */

    public class TestPriority {

             public static void main(String[] args) {

                       PrintNumberThread p1 = new PrintNumberThread("高優先級");

                       PrintNumberThread p2 = new PrintNumberThread("普通優先級");

                       PrintNumberThread p3 = new PrintNumberThread("低優先級");

                       p1.setPriority(Thread.MAX_PRIORITY);

                       p2.setPriority(Thread.NORM_PRIORITY);

                       p3.setPriority(Thread.MIN_PRIORITY);

                       p1.start();

                       p2.start();

                       p3.start();

             }

    }

    package priority;

    /**

     * 輸出數字的線程

     */

    public class PrintNumberThread extends Thread {

             String name;

             public PrintNumberThread(String name){

                       this.name = name;

             }

             public void run(){

                       try{

                                for(int i = 0;i < 10;i++){

                                         System.out.println(name + ":" + i);

                                }

                       }catch(Exception e){}

             }

    }

    程序的一種執行結果為:

    高優先級:0

    高優先級:1

    高優先級:2

    普通優先級:0

    高優先級:3

    普通優先級:1

    高優先級:4

    普通優先級:2

    高優先級:5

    高優先級:6

    高優先級:7

    高優先級:8

    高優先級:9

    普通優先級:3

    普通優先級:4

    普通優先級:5

    普通優先級:6

    普通優先級:7

    普通優先級:8

    普通優先級:9

    低優先級:0

    低優先級:1

    低優先級:2

    低優先級:3

    低優先級:4

    低優先級:5

    低優先級:6

    低優先級:7

    低優先級:8

    低優先級:9

             在該示例程序,PrintNumberThread線程實現的功能是輸出數字,每次數字輸出之間沒有設置時間延遲,在測試類TestPriority中創建三個PrintNumberThread類型的線程對象,然后分別設置線程優先級是最高、普通和最低,接著啟動線程執行程序。從執行結果可以看出高優先級的線程獲得了更多的執行時間,首先執行完成,而低優先級的線程由于優先級較低,所以最后一個執行結束。

             其實,對于線程優先級的管理主要由系統的線程調度實現,較高優先級的線程優先執行,所以可以通過設置線程的優先級影響線程的執行。

    5 總結
             關于多線程的基礎知識就介紹這么多,在本章中介紹了線程的概念、線程的實現方式以及使用多線程時會遇到的問題以及解決辦法,而需要建立多線程的概念,也就是并發編程的概念還需要進行比較多的練習,理解多線程的概念并熟悉多線程的編程。

             而關于多線程編程的高級知識,如線程組等則可以在熟悉了線程的基本概念以后再進行更加深入的學習。

     

     

    posted on 2009-05-31 20:53 江蘇520 閱讀(1657) 評論(0)  編輯  收藏

    主站蜘蛛池模板: 亚洲A∨午夜成人片精品网站| 亚洲欧洲免费无码| 亚洲高清无码在线观看| 亚洲精品无码少妇30P| 国产成在线观看免费视频| 亚洲小视频在线播放| 在线观看成人免费视频不卡| 亚洲成人动漫在线观看| www.黄色免费网站| 亚洲一卡2卡3卡4卡乱码 在线| 成人免费一级毛片在线播放视频 | 国产亚洲精品资在线| 成年网在线观看免费观看网址| 国产成人亚洲综合无码| 中国性猛交xxxxx免费看| 久久亚洲精品成人| **aaaaa毛片免费| 中文日韩亚洲欧美制服| 国产成人精品男人免费| 一级毛片a女人刺激视频免费| 亚洲无人区一区二区三区| 久久免费观看国产精品| 亚洲人成电影在线观看青青| 国内自产少妇自拍区免费| 美女被免费视频网站a| 亚洲一区二区三区自拍公司| 日本免费人成视频在线观看| 色偷偷女男人的天堂亚洲网| 免费一看一级毛片全播放| 国产一级高青免费| 亚洲成人一级电影| 国产精品无码素人福利免费| a级毛片高清免费视频就| 亚洲视频一区在线| 午夜成人免费视频| 一个人看的www视频免费在线观看 一个人看的免费观看日本视频www | 99久久婷婷国产综合亚洲| 性做久久久久免费看| 国产无遮挡裸体免费视频在线观看| 亚洲日本在线播放| 亚洲AV网站在线观看|