根據我的知識singleton對象不是線程安全的並且會話工廠單例對象是線程安全的。 這怎麼可能,請解釋一下。Singleton對象和sessionfactory單例對象之間有什麼區別
0
A
回答
0
會話工廠對象也使用singleton
設計模式實現。
單體設計模式可以製作爲thread safe
。
他們已經爲會話工廠實現了帶有線程安全的單例。
當我們執行singleton
時,我們應該確定我們是否需要線程安全,我們應該按照實施。
看到各種實現單的在我的博客下的設計模式
2
的單件模式既不是線程安全的,也不不是線程安全本身。你必須看看你的具體實施。主要問題是,它是否管理狀態?
如果是這樣,那麼您將確保不允許超過一個線程同時更改狀態。這是全局變量在線程安全方面遇到的同樣問題。但是有確保這種安全的機制,一種被稱爲互斥。兩個線程同時修改同一個變量的事件是一個有問題的事件,還有更多需要注意的事件。就像兩個線程按順序修改一個變量,然後問題是誰的答案是重要的。
總體上相互排斥的事件和java上下文中的具體解釋可以分別找到here (Mutually exclusive events)和here (Oracle concurrency guide)。全局變量解釋爲here。無狀態和有狀態也是關於concurrency, parallelism and thread-safety的很好的術語。
回到你的問題:出廠通常不引入任何狀態,雖然可以被多個線程之間自由共享。工廠生成的實例最有可能是有狀態的,只有在線程安全後才能在線程之間共享。
重要說明: 但請不要誤解我的意思。不要忘記總是檢查你的單身人士的實施!在java中,您可以引入註釋來記錄您的調查,並將特定的代碼元素標記爲線程安全。有一些包已經定義了常用的註釋來記錄這種行爲,請看apache org.apache.http.annotation。當你使用API時,檢查這些提示的文檔是個好主意。
相關問題
- 1. _EPROCESS對象和_KPROCESS對象之間有什麼區別
- 2. 實例和對象之間有什麼區別?
- 3. 對象和實例有什麼區別?
- 4. val和singleton對象之間有什麼細微差別?
- 5. 對象和字符串對象之間的區別是什麼
- 6. 實例和對象之間的功能區別是什麼?
- 7. Deferred對象和它自己的承諾對象之間有什麼區別?
- 8. C++中的派生對象和基礎對象之間有什麼區別?
- 9. ResultSet和對象之間有什麼區別?
- 10. 對象,*和沒有類型之間的區別是什麼?
- 11. C#中的對象和類之間有什麼區別?
- 12. Ref對象的getPeeledObjectId()和getObjectId()之間有什麼區別?
- 13. JSON和JavaScript對象之間有什麼區別?
- 14. Perl中的對象和類之間有什麼區別?
- 15. 對象和引用有什麼區別?
- 16. 「WSH」和「WScript」對象有什麼區別?
- 17. 對象和變量有什麼區別?
- 18. 運行主對象內部的對象實例與純靜態對象之間有什麼區別?
- 19. 是什麼在JavaScript中的新對象和新的對象()之間的區別
- 20. 空對象類型和對象有什麼區別?
- 21. Javascript對象和JSON對象有什麼區別
- 22. HttpSession對象和HttpContext對象有什麼區別?
- 23. ,對象和指向對象的指針有什麼區別?
- 24. java中的對象和對象有什麼區別
- 25. UML中的引用對象和值對象有什麼區別?
- 26. 全局對象和頭部全局對象有什麼區別?
- 27. 對象和*之間的區別?
- 28. 對象和散列之間的區別?
- 29. 對象和字典之間的區別?
- 30. 對象之間的區別(javascript和jquery)