Struts 1 和 Struts 2 的线程安全
??? 總的來說,Struts1 的 Action 是單例模式,因此開發者必須保證它是線程安全的或是同步的,因為Struts 1中每個Action僅有一個實例來處理所有的請求。
?
??? 但是在用Struts 1開發時并沒有考慮到線程安全問題,這是因為我們在Action中使用的基本都是局部變量,而“局部變量是線程安全的。因為每執行一個方法,都會在獨立的 空間創建局部變量,它不是共享的資源。局部變量包括方法的參數變量”(忘了引自哪了)。在Struts 1中,所有的變量都是定義在Action中我們要執行的方法里的(Action中的execute方法或DispatchAction中指定要執行的方 法),我們用于封裝客戶端請求參數的ActionForm,也是作為一個參數傳入,也屬于局部變量,因此,不存在線程安全問題。
?
??? Struts 2 的 Action 對象為每一個請求產生一個實例,因此,雖然在Action中定義了很多全局變量,也不存在線程安全問題。
??? Struts 2框架在處理每一個用戶請求的時候,都建立一個單獨的線程進行處理,值棧ValueStack也是伴隨著局部線程而存在的。在該線程存在過程中,可以隨意訪問值棧,這就保證了值棧的安全性。
?
??? 在Struts 2中,ActionContext是一個局部線程,這就意味著每個線程中的ActionContext內容都是唯一的。所以開發者不用擔心Action的線程安全。
總結
以上是生活随笔為你收集整理的Struts 1 和 Struts 2 的线程安全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android组件的通讯-Intent
- 下一篇: 江湖上的潜规则