2 回答

TA貢獻1812條經驗 獲得超5個贊
這取決于你如何使用這個類。
使用doPost
控制器中的方法,它對于多個用戶來說是線程安全的,因為您new SqlDataset
每次都創建對象。
這意味著它將僅由處理單個請求的線程使用。
您的控制器代碼是可重入且線程安全的。
順便說一句,如果您打算使用您SqlDataset
的單例(例如 Spring bean 等) - 它不是線程安全的。它在流程中使用了實例變量——這意味著SqlDataset
方法不可重入。
想想他們……
private QueryProcessor qp;
每次在getQueryResult()
方法中創建新實例時,您真的需要嗎?private ArrayList<String> dataHeader = new ArrayList<>();
當你從它返回時你真的需要getHeaders()
- 為什么不只是在方法內創建新的ArrayList
beforefor
循環。...等等...
如果您將所有內容作為參數傳遞給方法并返回在方法中創建的所有內容,它將是完全線程安全的。
單例可能只有不可變的實例變量(邏輯上幾乎是常量),以保持某些設置或屬性適用于使用它的任何線程。

TA貢獻1854條經驗 獲得超8個贊
它SqlDataset.java
本身不是線程安全的,因為其中有實例變量。
但是,如果您僅在某些request controller
方法中使用它,則不會有任何問題。這是因為 aServlet
不是線程安全的,但 Servlets 方法是線程安全的。
添加回答
舉報