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

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

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

    OMG,到底在尋找什么..................
    (構(gòu)造一個完美的J2EE系統(tǒng)所需要的完整知識體系)
    posts - 198,  comments - 37,  trackbacks - 0
    Servlet是在多線程環(huán)境下的。即可能有多個請求發(fā)給一個servelt實例,每個請求是一個線程。
    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)境編寫代碼。我們的controller servlet指揮創(chuàng)建你的Action 類的一個實例,用此實例來服務(wù)所有的請求。因此,你必須編寫線程安全的Action類。遵循與寫線程安全的servlet同樣的方針。

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

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

    但是,線程同步是不得以的方法,是比較復(fù)雜的,而且會帶來性能的損失。等效的代碼中,不需要同步在編寫容易度和性能上會更好些。
    我這里強調(diào)的是什么代碼是始終為線程安全的、是不需要同步的。如下:
    1)常量始終是線程安全的,因為只存在讀操作。
    2)對構(gòu)造器的訪問(new 操作)是線程安全的,因為每次都新建一個實例,不會訪問共享的資源。
    3)最重要的是:局部變量是線程安全的。因為每執(zhí)行一個方法,都會在獨立的空間創(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.
    譯:只使用用局部變量。--編寫線程安全的代碼最重要的原則就是,在Action類中只使用局部變量,不使用實例變量。


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

    ===========================================

    以上是我找到令我自己滿意的答案!!!
    “2)對構(gòu)造器的訪問(new 操作)是線程安全的”
    我想只有這一句話就夠了!!


    非常全面,不錯。

    _________________________________________________________
    對構(gòu)造器的訪問(new 操作)是線程安全的
    每次調(diào)用后續(xù)業(yè)務(wù)對象時都是先新建一個實例再調(diào)用,則都是線程安全的

    這是正確的,這只是在Jsp+JavaBeans架構(gòu)下適用。

    通過new創(chuàng)建對象有很多設(shè)計問題,因此,實戰(zhàn)中我們現(xiàn)在基本不通過new來獲得對象。

    既然不通過new獲得對象,那么如何保證Struts線程問題?
    原則就是:
    一個請求一個線程,一個業(yè)務(wù)對象,一個資源,就象專用通道一樣。
    這里涉及對象多例、單例等復(fù)雜問題。
    posted on 2006-06-21 16:31 OMG 閱讀(990) 評論(0)  編輯  收藏 所屬分類: Struts

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


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

    <2006年6月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    IT風(fēng)云人物

    文檔

    朋友

    相冊

    經(jīng)典網(wǎng)站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一区免费在线观看| 3d动漫精品啪啪一区二区免费| 亚洲综合av永久无码精品一区二区 | 在线精品亚洲一区二区三区| 99热这里只有精品免费播放 | 一级毛片在线免费观看| 亚洲综合中文字幕无线码| 亚洲国产精品国产自在在线| 在线成人爽a毛片免费软件| MM1313亚洲精品无码久久| 亚洲第一极品精品无码久久| 永久久久免费浮力影院| 香蕉免费一区二区三区| MM1313亚洲国产精品| 亚洲黄色在线播放| 久久亚洲精品无码观看不卡| 在线观看免费人成视频| a在线观看免费视频| 亚洲成a人片在线不卡一二三区| 亚洲精品美女久久777777| 日韩免费在线观看| 91在线老王精品免费播放| kk4kk免费视频毛片| 亚洲精品人成网在线播放影院| 国产AV无码专区亚洲AVJULIA| 国产高清在线精品免费软件| 蜜桃视频在线观看免费视频网站WWW| 精品在线免费视频| 2020天堂在线亚洲精品专区| 精品亚洲综合在线第一区| 国产一区二区三区在线免费观看 | 亚洲AV无码一区二区三区鸳鸯影院| 亚洲av无码一区二区三区网站 | 亚洲伊人久久大香线蕉在观| 亚洲精品国产字幕久久不卡| 免费a级毛片18以上观看精品| 香蕉97超级碰碰碰免费公| 日韩精品内射视频免费观看| 中文字幕免费在线播放| 理论片在线观看免费| 亚洲av成人无码网站…|