2010-01-29 125 views
3

是什麼,以避免在JSP競爭條件,同時不給process.I減緩試圖 isThreadSafe =假 同步(會話)如何避免競爭條件

但是沒有任何的最佳途徑其他備用解決方案可用?

+0

相關問題:http://stackoverflow.com/questions/1820629/using-request-getsession-as-a-locking-object http://stackoverflow.com/questions/616601/is-httpsession-thread-safe -are-設置獲得屬性線程安全的操作 – McDowell 2010-01-29 11:28:32

回答

6

一個通用的解決方案(例如threadSafe=false)會導致一次執行一個請求。這不可避免地減緩了請求處理。

爲了避免這種情況,您需要了解爲什麼要獲得競爭條件並(重新)設計架構以避免出現問題。例如:

  • 如果比賽條件是更新一些共享內存中的數據結構,你需要訪問和更新的數據結構,在粒度的適當水平

  • 如果同步

    競爭條件更新到您的數據庫時,您需要重構SQL以使用適當級別的事務。

這些只是(可能)如何解決您的種族條件問題的模式。事實上,你必須瞭解自己的根本原因。

5

這取決於你爲什麼有競爭條件。

最簡單的想法是沒有寫入的全局變量。

在只使用局部變量的方法中執行所有的邏輯。

在jsp頁面中沒有任何java代碼,但是調用bean來執行操作。

你在做什麼導致競爭條件?

1
isThreadSafe=false 

這可能會導致性能下降,因爲它使頁面訪問順序。它也只會影響一個頁面,所以如果你通過另一個頁面訪問數據,這將不會爲你做任何事情。

synchronized(session) 

這是不能保證工作(即使它會在某些服務器作爲實現的副作用的)。

任何解決方案可能都需要更多關於您試圖防範的數據和服務器配置的信息。