2014-05-24 138 views

回答

0

會話工廠對象也使用singleton設計模式實現。

單體設計模式可以製作爲thread safe

他們已經爲會話工廠實現了帶有線程安全的單例。

當我們執行singleton時,我們應該確定我們是否需要線程安全,我們應該按照實施。

看到各種實現單的在我的博客下的設計模式

java guide

2

的單件模式既不是線程安全的,也不不是線程安全本身。你必須看看你的具體實施。主要問題是,它是否管理狀態?

如果是這樣,那麼您將確保不允許超過一個線程同時更改狀態。這是全局變量在線程安全方面遇到的同樣問題。但是有確保這種安全的機制,一種被稱爲互斥。兩個線程同時修改同一個變量的事件是一個有問題的事件,還有更多需要注意的事件。就像兩個線程按順序修改一個變量,然後問題是誰的答案是重要的。

總體上相互排斥的事件和java上下文中的具體解釋可以分別找到here (Mutually exclusive events)here (Oracle concurrency guide)。全局變量解釋爲here。無狀態和有狀態也是關於concurrency, parallelism and thread-safety的很好的術語。

回到你的問題:出廠通常不引入任何狀態,雖然可以被多個線程之間自由共享。工廠生成的實例最有可能是有狀態的,只有在線程安全後才能在線程之間共享。

重要說明: 但請不要誤解我的意思。不要忘記總是檢查你的單身人士的實施!在java中,您可以引入註釋來記錄您的調查,並將特定的代碼元素標記爲線程安全。有一些包已經定義了常用的註釋來記錄這種行爲,請看apache org.apache.http.annotation。當你使用API​​時,檢查這些提示的文檔是個好主意。

相關問題