Structs的線程安全問題

          以前做過Structs 的項目,可是一直沒做太深的研究,尤其是關于線程安全的
          在網上搜了一下很多這方面的資料,引用了一些,總結了一下:

          總結:Struts1 Action是單例模式并且必須是線程安全的,因為僅有Action的一個實例來處理所有的請求。單例策略限制了Struts1 Action能作的事,并且要在開發時特別小心。Action資源必須是線程安全的或同步的。
          Struts2 Action可以使用原型模式scope=prototype,這樣對象為每一個請求產生一個實例,因此沒有線程安全問題。(實際上,servlet容器給每個請求產生許多可丟棄的對象,并且不會導致性能和垃圾回收問題)

           

          這篇文章對什么是線程安全的代碼和如何使用線程安全的代碼做了詳細闡述
          http://hi.baidu.com/niujunkai/blog/item/021964adc130660a4a36d6ab.html
          下面是它內容的引用:

          引用:

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

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

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


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

           

          如果想加深理解servlet的多線程可以讀讀此文,闡述的很詳細。
          http://hi.baidu.com/platon/blog/item/64a20ff3f96e7fce0b46e031.html

          posted on 2009-10-29 16:26 AK47 閱讀(1043) 評論(0)  編輯  收藏 所屬分類: Structs

          <2009年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宜宾县| 新源县| 建德市| 册亨县| 兴仁县| 苏尼特右旗| 姚安县| 闻喜县| 南靖县| 灌南县| 武汉市| 格尔木市| 东山县| 海盐县| 临汾市| 清河县| 前郭尔| 三台县| 东阿县| 黄山市| 临城县| 奉节县| 邵阳县| 上高县| 萨迦县| 遂溪县| 四子王旗| 平果县| 上杭县| 得荣县| 徐水县| 东阿县| 马关县| 巴楚县| 乌拉特后旗| 烟台市| 太和县| 乐平市| 普兰店市| 石狮市| 普陀区|