2014-05-07 23 views
0

如果在servlet的服務方法下創建的HashMap比在線程安全的情況下創建的要多? 這是一個基於用戶的網絡應用程序,不同的用戶將登錄並訪問該servlet,並因此根據他們的組訪問他們特定的地圖數據。Servlet的服務方法中的HashMap

service(request,response) { 
    HashMap h = new HashMap(); 
    h.put(keyfromserver,valuefromserver); // this is in for loop 
} 
+0

發佈相關代碼來提出您的設計。 –

+0

請參閱示例代碼 – gSingh

+0

它是線程安全的,但除非將map保存到會話範圍或其他地方,否則'map'將會丟失。 –

回答

1

如果在Servlet的服務方法中創建這樣的對象,並假定該service方法通過將地圖在請求或響應的對象使該對象可通過其他方法,如doGetdoPost程序員,這個對象仍然是線程安全的,因爲它是在請求執行過程中創建的,服務方法只爲特定線程提供服務。

如果在另一個線程中發出其他請求,則意味着會調用另一個service方法,因此它會實例化另一個映射對象。

如果您要將對象的引用保留在給定請求的範圍之外,例如將其保存在靜態字段中或將其保存到共享會話中,則會使該對象不安全。在這種情況下,對象的使用不限於請求,而是限於多個其他請求,可能發生在不同的線程中。

+0

謝謝,這是非常清楚的解釋,... – gSingh

+0

共享會話是什麼意思?我必須在第一個servlet中使用session.setattribute(「map」,h),並且需要在第二個servlet中獲取session.getattribute(「map」).... – gSingh

+0

因此,您的意思是session.setattribute(「map」, h)不會線程安全? – gSingh