歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> struts中Action線程安全問題

struts中Action線程安全問題

日期:2017/3/1 10:20:21   编辑:Linux編程

線程安全:在多線程環境下能正確執行的代碼就是線程安全的,安全的意思就是能夠正確執行,程序代碼執行不出錯誤等其他異常情況

實例變量:在堆中分配的,並被屬於該實例的所有線程共享,所以不是線程安全的

局部變量:在堆棧中分配,因為每個實例都有它自己的堆棧空間,所以是線程安全的

J2EE是一個多線程的環境,服務器針對每個請求啟動一個線程來處理,所以有可能會有多個線程同時訪問一個Servlet實例的情況。在Struts裡面也是一樣的,有可能會有多個線程同時訪問一個Action實例的情況,這時就會出現線程安全的問題,所以要保證Action類中的方法具有“可重入性”,即不可以在Action的方法裡改變實例變量的值。

在設計Action類時應該注意:

1、不要使用實例或靜態變量存儲特定請求的狀態信息,因為它們會在同一個操作中共享跨越請求的全局資源,引發線程安全問題

2、如果並行訪問資源需要保護,訪問就要進行同步(例如:synchronized關鍵字的使用)

3、使用常量是線程安全的,因為只存在讀操作

4、對構造器的訪問(new 操作)是線程安全的,因為每次都創建一個實例,不會訪問共享資源

5、局部變量也是線程安全的。因為沒執行一個方法,都會在獨立的空間創建局部變量,它不是共享資源。局部變量包括方法的參數變量。

Copyright © Linux教程網 All Rights Reserved