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

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

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

    Java學習

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

     

    多線程問題及處理3

    12.4.3 死鎖

             多線程編程在實際的網(wǎng)絡程序開發(fā)中,在客戶端程序?qū)崿F(xiàn)中使用的比較簡單,但是在服務器端程序?qū)崿F(xiàn)中卻不僅是大量使用,而且會出現(xiàn)比客戶端更多的問題。

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

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

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

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

    12.4.4 線程優(yōu)先級

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

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

             Thread類中,總計規(guī)定了三個優(yōu)先級,分別為:

    MAX_PRIORITY——最高優(yōu)先級

    NORM_PRIORITY——普通優(yōu)先級,也是默認優(yōu)先級

    MIN_PRIORITY——最低優(yōu)先級

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

             public final void setPriority(int newPriority)

    假設t是一個初始化過的線程對象,需要設置t的優(yōu)先級為最高,則實現(xiàn)的代碼為:

             t. setPriority(Thread. MAX_PRIORITY);

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

    下面使用一個簡單的輸出數(shù)字的線程演示線程優(yōu)先級的使用,實現(xiàn)的示例代碼如下:

             package priority;

    /**

     * 測試線程優(yōu)先級

     */

    public class TestPriority {

             public static void main(String[] args) {

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

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

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

                       p1.setPriority(Thread.MAX_PRIORITY);

                       p2.setPriority(Thread.NORM_PRIORITY);

                       p3.setPriority(Thread.MIN_PRIORITY);

                       p1.start();

                       p2.start();

                       p3.start();

             }

    }

    package priority;

    /**

     * 輸出數(shù)字的線程

     */

    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){}

             }

    }

    程序的一種執(zhí)行結(jié)果為:

    高優(yōu)先級:0

    高優(yōu)先級:1

    高優(yōu)先級:2

    普通優(yōu)先級:0

    高優(yōu)先級:3

    普通優(yōu)先級:1

    高優(yōu)先級:4

    普通優(yōu)先級:2

    高優(yōu)先級:5

    高優(yōu)先級:6

    高優(yōu)先級:7

    高優(yōu)先級:8

    高優(yōu)先級:9

    普通優(yōu)先級:3

    普通優(yōu)先級:4

    普通優(yōu)先級:5

    普通優(yōu)先級:6

    普通優(yōu)先級:7

    普通優(yōu)先級:8

    普通優(yōu)先級:9

    低優(yōu)先級:0

    低優(yōu)先級:1

    低優(yōu)先級:2

    低優(yōu)先級:3

    低優(yōu)先級:4

    低優(yōu)先級:5

    低優(yōu)先級:6

    低優(yōu)先級:7

    低優(yōu)先級:8

    低優(yōu)先級:9

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

             其實,對于線程優(yōu)先級的管理主要由系統(tǒng)的線程調(diào)度實現(xiàn),較高優(yōu)先級的線程優(yōu)先執(zhí)行,所以可以通過設置線程的優(yōu)先級影響線程的執(zhí)行。

    12.5 總結(jié)

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

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

    12.6 多線程練習

             1、分別使用多線程的3種實現(xiàn)方法,實現(xiàn)一個打印奇數(shù)的線程

             2、分別使用多線程的3種實現(xiàn)方法,實現(xiàn)一個打印1-10000之間素數(shù)(質(zhì)數(shù))的線程

             3、在練習1、練習2的基礎上,加入控制臺輸入,當線程執(zhí)行時,輸入quitexit結(jié)束線程和程序的執(zhí)行。

             4、實現(xiàn)兩個線程,一個打印奇數(shù),一個打印偶數(shù),每個線程的延遲時間不一樣,實現(xiàn)奇數(shù)和偶數(shù)的交替打印。

             5、模擬火車票聯(lián)網(wǎng)售票系統(tǒng):多個線程同時出票,保證每張出票的編號連續(xù)且不重復。

    posted on 2009-06-15 13:26 找個美女做老婆 閱讀(590) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     

    導航

    統(tǒng)計

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 黄色a级免费网站| 国产hs免费高清在线观看| 亚洲另类激情综合偷自拍图| 亚洲a∨国产av综合av下载| 2021免费日韩视频网| 亚洲av无码久久忘忧草| 日本h在线精品免费观看| 亚洲综合久久成人69| h片在线免费观看| 亚洲免费福利在线视频| 国内免费高清在线观看| 亚洲精品无码你懂的| 国产一精品一aⅴ一免费| 无码人妻一区二区三区免费视频| 亚洲欧洲久久av| a毛片在线还看免费网站| 亚洲一区二区三区高清| 久久久久久国产a免费观看黄色大片| 亚洲av无码片区一区二区三区| 成人午夜免费福利| 免费无码午夜福利片| 好看的电影网站亚洲一区| 8x8×在线永久免费视频| 亚洲午夜在线播放| 亚洲AV无码乱码精品国产| 国产黄片不卡免费| 91亚洲国产成人久久精品网站| a毛片基地免费全部视频| 男男gay做爽爽免费视频| 精品亚洲综合久久中文字幕| 久久国产高潮流白浆免费观看| 亚洲AV无码专区在线亚| 无码欧精品亚洲日韩一区夜夜嗨| 一级免费黄色大片| 国产大片免费观看中文字幕| 成人免费夜片在线观看| 国产亚洲精品va在线| 69免费视频大片| 亚洲字幕AV一区二区三区四区| 日本免费网站视频www区| 亚洲区视频在线观看|