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

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

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

    posts - 120,  comments - 19,  trackbacks - 0

    Servlet是在多線程環(huán)境下的。即可能有多個(gè)請(qǐng)求發(fā)給一個(gè)servelt實(shí)例,每個(gè)請(qǐng)求是一個(gè)線程。
    struts下的action也類似,同樣在多線程環(huán)境下。可以參考struts user guide: http://struts.apache.org/struts-action/userGuide/building_controller.html 中的Action Class Design Guidelines一節(jié): Write code for a multi-threaded environment - Our controller servlet creates only one instance of your Action class, and uses this one instance to service all requests. Thus, you need to write thread-safe Action classes. Follow the same guidelines you would use to write thread-safe Servlets.
    譯:為多線程環(huán)境編寫(xiě)代碼。我們的controller servlet指揮創(chuàng)建你的Action 類的一個(gè)實(shí)例,用此實(shí)例來(lái)服務(wù)所有的請(qǐng)求。因此,你必須編寫(xiě)線程安全的Action類。遵循與寫(xiě)線程安全的servlet同樣的方針。

    1.什么是線程安全的代碼
    在多線程環(huán)境下能正確執(zhí)行的代碼就是線程安全的。
    安全的意思是能正確執(zhí)行,否則后果是程序執(zhí)行錯(cuò)誤,可能出現(xiàn)各種異常情況。

    2.如何編寫(xiě)線程安全的代碼
    很多書(shū)籍里都詳細(xì)講解了如何這方面的問(wèn)題,他們主要講解的是如何同步線程對(duì)共享資源的使用的問(wèn)題。主要是對(duì)synchronized關(guān)鍵字的各種用法,以及鎖的概念。
    Java1.5中也提供了如讀寫(xiě)鎖這類的工具類。這些都需要較高的技巧,而且相對(duì)難于調(diào)試。

    但是,線程同步是不得以的方法,是比較復(fù)雜的,而且會(huì)帶來(lái)性能的損失。等效的代碼中,不需要同步在編寫(xiě)容易度和性能上會(huì)更好些。
    我這里強(qiáng)調(diào)的是什么代碼是始終為線程安全的、是不需要同步的。如下:
    1)常量始終是線程安全的,因?yàn)橹淮嬖谧x操作。
    2)對(duì)構(gòu)造器的訪問(wèn)(new 操作)是線程安全的,因?yàn)槊看味夹陆ㄒ粋€(gè)實(shí)例,不會(huì)訪問(wèn)共享的資源。
    3)最重要的是:局部變量是線程安全的。因?yàn)槊繄?zhí)行一個(gè)方法,都會(huì)在獨(dú)立的空間創(chuàng)建局部變量,它不是共享的資源。局部變量包括方法的參數(shù)變量。
    struts user guide里有:
    Only Use Local Variables - The most important principle that aids in thread-safe coding is to use only local variables, not instance variables , in your Action class.
    譯:只使用用局部變量。--編寫(xiě)線程安全的代碼最重要的原則就是,在Action類中只使用局部變量,不使用實(shí)例變量。


    總結(jié):
    在Java的Web服務(wù)器環(huán)境下開(kāi)發(fā),要注意線程安全的問(wèn)題。最簡(jiǎn)單的實(shí)現(xiàn)方式就是在Servlet和Struts Action里不要使用類變量、實(shí)例變量,但可以使用類常量和實(shí)例常量。
    如果有這些變量,可以將它們轉(zhuǎn)換為方法的參數(shù)傳入,以消除它們。
    注意一個(gè)容易混淆的地方:被Servlet或Action調(diào)用的類中(如值對(duì)象、領(lǐng)域模型類)中是否可以安全的使用實(shí)例變量?如果你在每次方法調(diào)用時(shí)
    新建一個(gè)對(duì)象,再調(diào)用它們的方法,則不存在同步問(wèn)題---因?yàn)樗鼈儾皇嵌鄠€(gè)線程共享的資源,只有共享的資源才需要同步---而Servlet和Action的實(shí)例對(duì)于多個(gè)線程是共享的。
    換句話說(shuō),Servlet和Action的實(shí)例會(huì)被多個(gè)線程同時(shí)調(diào)用,而過(guò)了這一層,如果在你自己的代碼中沒(méi)有另外啟動(dòng)線程,且每次調(diào)用后續(xù)業(yè)務(wù)對(duì)象時(shí)都是先新建一個(gè)實(shí)例再調(diào)用,則都是線程安全的。



    posted on 2007-04-09 20:31 阿成 閱讀(496) 評(píng)論(0)  編輯  收藏 所屬分類: Struts
    主站蜘蛛池模板: 亚洲色偷拍区另类无码专区| 激情吃奶吻胸免费视频xxxx| 亚洲午夜爱爱香蕉片| 国产成在线观看免费视频| 永久免费A∨片在线观看| 国产亚洲美女精品久久| 在线综合亚洲中文精品| 久久精品无码专区免费东京热| 免费的黄色网页在线免费观看| 亚洲AV无码一区二区三区牛牛| 免费很黄很色裸乳在线观看| 动漫黄网站免费永久在线观看| 99re6在线视频精品免费| 免费手机在线看片| 亚洲AV成人精品一区二区三区| 亚洲专区中文字幕| 免费一级肉体全黄毛片| 大学生美女毛片免费视频| 2015日韩永久免费视频播放| 亚洲狠狠婷婷综合久久| 亚洲一级毛片中文字幕| 亚洲欧洲春色校园另类小说| 亚洲高清视频在线观看| 亚洲AV日韩AV永久无码绿巨人| 色噜噜AV亚洲色一区二区| 亚洲无码精品浪潮| 亚洲无线一二三四区手机| 亚洲视频人成在线播放| 亚洲人成网站在线观看青青| www.亚洲色图.com| 亚洲福利在线播放| 亚洲国产中文v高清在线观看| 亚洲av日韩av欧v在线天堂| 日韩精品电影一区亚洲| 亚洲国产一区二区视频网站| 亚洲精品无码成人片在线观看 | 国产成人3p视频免费观看| 四虎www免费人成| 在线观看91精品国产不卡免费| 成人毛片免费播放| 国产伦一区二区三区免费|