Struts 1 和 strtust 2 的執行緒安全性問題

來源:互聯網
上載者:User

 http://dadi520.iteye.com/blog/856095

 

 

引用: http://jiediax.iteye.com/blog/774265

        http://startor.iteye.com/blog/705979

        http://www.jdon.com/jivejdon/thread/26846

 

 

使用了這麼久的Struts,今天總算把Struts Action的安全執行緒問題研究了一下,在網上查了很多資料,這裡把我理解的總結一下。

先提一個問題:Struts 1.x和Struts 2的Action是不是安全執行緒的?

Struts 1.x在第一次請求某個Action時,會建立這個Action執行個體。但之後再請求該Action執行個體時,就用之前建立好的這個Action處理,即它是單例模式。所以Struts 1.x的Action不是安全執行緒的。

但是為什麼我們在使用Struts 1.x開發的時候一般不用考慮安全執行緒問題呢?
那是因為Struts 1.x的方法調用模式用到的參數一般都是局部變數(包括request, response等,如下面的方法定義),我們用於封裝用戶端請求參數的ActionForm,也是作為一個參數傳入,也屬於局部變數,
局部變數是安全執行緒的,因此不存線上程安全問題。
但是要是在execute中使用了執行個體變數,就會存線上程安全問題。所以我們用Struts 1.x開發時盡量不要使用執行個體變數,

如果一定要用或者有這種需要,那麼我們一定要意識到使用執行個體變數是存線上程安全的,可以使用同步機制去處理安全執行緒問題。
public ActionForward execute (ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ActionException;總結: struts中的 和Action的執行個體(單例) 會被多個線程同時調用,  所以存在著多個線程共用同一個資源(Action), 所有要注意同步的問題

Struts 2 Action對象為每一個請求產生一個執行個體,因此沒有安全執行緒問題 。
在Sping + Struts 2的應用中,由Spring來管理Struts 2的Action,而IoC容器管理的bean預設是單一實例的

(scope="singleton"),加上Struts 2的Action就像一個POJO一樣,定義了很多的類變數,這就有安全執行緒問題了。解決些問題最簡單的辦法就是不使用單例模式(設定scope="prototype")。

<bean id="testAction" class="com.webapp.action.TestAction" scope="prototype">

引言:
但是,線程同步是不得以的方法,是比較複雜的,而且會帶來效能的損失。等效的代碼中,不需要同步在編寫容易度和效能上會更好些。
我這裡強調的是什麼代碼是始終為安全執行緒的、是不需要同步的。如下:
1)常量始終是安全執行緒的,因為只存在讀操作。
2)對構造器的訪問(new 操作)是安全執行緒的,因為每次都建立一個執行個體,不會訪問共用的資源。
3)最重要的是:局部變數是安全執行緒的。因為每執行一個方法,都會在獨立的空間建立局部變數,它不是共用的資源。局部變數包括方法的參數變數。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.