2014-07-24 143 views
3

我讀了很多需要在編碼同步時注意的博客和文章。他們要求使用concurrentHashMap,synchronizedList等。java web應用程序中的併發

根據我的理解,在java web應用程序,應用程序服務器(例如jboss,weblogic,tomcat)中,每個請求都在單獨的線程下運行。

例如我有一系列的方法執行方法1 - >方法2 - >方法3,然後每個請求都有自己的執行堆棧。那麼爲什麼我們需要更多地考慮同步?

要麼我對併發請求的理解不正確,要麼我錯過了有關同步方案的內容。

請指教。

回答

4

因爲在大多數應用程序中,處理請求涉及訪問某些共享數據,這些共享數據也可能被其他線程同時處理其他請求訪問。

HTTP會話是一個很好的例子:同一會話中的所有請求共享同一個對象,因此如果瀏覽器同時發送兩個請求,處理這些請求的兩個線程可能會嘗試訪問同一個對象的HttpSession對象同一時間。您需要同步以避免損壞會話。

+0

以更簡單的方式 - 它可能是一個文件,很少有線程正在從它讀取數據,而很少線程正在將數據寫入文件。 –

+0

共享數據通常保存在關係數據庫中,「同步」意味着仔細使用數據庫事務以避免數據處於不一致狀態。 (但這實際上只是@ AnkitSharma關於數據存儲在文件中的一個特例。) – Wyzard

+0

是的,我完全同意你的看法。我剛纔在這裏提到這一點,導致新的Bie很快觀察事物。 –