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

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

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

    Java學(xué)習(xí)

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

     

    多線程問(wèn)題及處理3

    12.4.3 死鎖

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

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

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

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

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

    12.4.4 線程優(yōu)先級(jí)

             在日常生活中,例如火車售票窗口等經(jīng)??梢钥吹?#8220;XXX優(yōu)先”,那么多線程編程中每個(gè)線程是否也可以設(shè)置優(yōu)先級(jí)呢?

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

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

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

    NORM_PRIORITY——普通優(yōu)先級(jí),也是默認(rèn)優(yōu)先級(jí)

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

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

             public final void setPriority(int newPriority)

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

             t. setPriority(Thread. MAX_PRIORITY);

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

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

             package priority;

    /**

     * 測(cè)試線程優(yōu)先級(jí)

     */

    public class TestPriority {

             public static void main(String[] args) {

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

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

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

                       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)先級(jí):0

    高優(yōu)先級(jí):1

    高優(yōu)先級(jí):2

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

    高優(yōu)先級(jí):3

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

    高優(yōu)先級(jí):4

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

    高優(yōu)先級(jí):5

    高優(yōu)先級(jí):6

    高優(yōu)先級(jí):7

    高優(yōu)先級(jí):8

    高優(yōu)先級(jí):9

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

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

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

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

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

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

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

    低優(yōu)先級(jí):0

    低優(yōu)先級(jí):1

    低優(yōu)先級(jí):2

    低優(yōu)先級(jí):3

    低優(yōu)先級(jí):4

    低優(yōu)先級(jí):5

    低優(yōu)先級(jí):6

    低優(yōu)先級(jí):7

    低優(yōu)先級(jí):8

    低優(yōu)先級(jí):9

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

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

    12.5 總結(jié)

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

             而關(guān)于多線程編程的高級(jí)知識(shí),如線程組等則可以在熟悉了線程的基本概念以后再進(jìn)行更加深入的學(xué)習(xí)。

    12.6 多線程練習(xí)

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

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

             3、在練習(xí)1、練習(xí)2的基礎(chǔ)上,加入控制臺(tái)輸入,當(dāng)線程執(zhí)行時(shí),輸入quitexit結(jié)束線程和程序的執(zhí)行。

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

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

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


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


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    公告

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

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲综合一区二区精品导航| 亚洲天堂一区二区| 国产成人AV免费观看| 久久亚洲精品人成综合网| 成年私人影院免费视频网站| 精品特级一级毛片免费观看| 亚洲精品少妇30p| 毛片大全免费观看| 成人av片无码免费天天看| 亚洲成a人片在线观| 四虎影视精品永久免费网站| 野花香高清在线观看视频播放免费 | 免费影院未满十八勿进网站| 国产亚洲福利在线视频| 亚洲熟妇无码AV在线播放| 免费一看一级毛片人| 国产精品亚洲片夜色在线| 成人av免费电影| WWW免费视频在线观看播放| 一区二区三区亚洲| 亚洲AV无码一区二三区 | 美女裸免费观看网站| 亚洲黄色免费电影| 亚洲精品乱码久久久久久蜜桃 | 国产精品成人免费视频网站京东| 污污免费在线观看| 亚洲一级在线观看| 亚洲va国产va天堂va久久| 国产精品免费视频一区| 182tv免费视视频线路一二三| 永久免费无码日韩视频| 精品国产日韩久久亚洲| 亚洲爱情岛论坛永久| 亚洲色图综合在线| 日本高清免费aaaaa大片视频| 国产亚洲免费的视频看| 污视频网站免费在线观看| 亚洲日日做天天做日日谢| 亚洲欧洲日韩在线电影| 亚洲精品国产美女久久久| 亚洲成av人片不卡无码久久|