2012-02-15 53 views
0

我的Servlet的許多方法都使用HTTPSession。將HTTPSession變量聲明爲實例變量是線程安全的嗎?Usnig會話作爲實例變量

+0

相關:http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading/3106909#3106909 – BalusC 2012-02-15 18:38:50

回答

2

由defaut Servlets不是線程安全的。此外,許多客戶端會調用一個servlet實例。 將會話作爲實例變量是絕對錯誤的。

參考:

Is a Servlet thread-safe

Write thread safe servlets

+0

即使我通過getThreadLocalRequest.getSession(獲取會話變量)? – MyTitle 2012-02-15 06:25:50

+0

@你好:什麼是'getThreadLocalRequest()'?你使用任何框架? – home 2012-02-15 06:40:52

+0

getThreadLocalRequest()表示獲取線程本地對象。這是線程安全的,因爲之前的每個請求初始化線程本地已經設置。我不確定它是哪個框架,我只是向你反映了一些有用的鏈接。 – 2012-02-15 06:55:42

1

不,它是不是安全。應用程序啓動時會創建一個servlet。 Servlet只有一個實例(這意味着多個請求/客戶端使用相同的servlet),這就是爲什麼你應該避免有任何實例變量。

+0

但會話是每個用戶的唯一對象。所以即使我通過getThreadLocalRequest.getSession()獲得會話,它也不是線程安全的? – MyTitle 2012-02-15 06:27:36