我有一個大型數組可供多線程訪問。單一鎖定效率不夠高。在java或scala中是否有範圍鎖定類?在java中的範圍鎖定
7
A
回答
1
將數組包裹在控制訪問的線程安全對象內。您可以自己管理範圍,也可以將數組拆分成範圍,每個範圍都有自己的鎖,並以此方式引用它。
6
不在標準庫中。 ConcurrentHashMap雖然這樣做,內部表示哈希表爲「段」(默認情況下16),其中每個用一個單獨的鎖保護。另外,this thread詢問除ArrayList而不是數組之外的相同問題。雖然沒有結果,但如果您能夠妥協使用,它會提出替代方案。
更新:也許AtomicReferenceArrayandfriends將提供您正在尋找的,而在同一時間它「提供]揮發性訪問語義到數組的元素」效率(JCIP 15.3)。
2
Generaly來講,除非你有併發的任期確實具體需要,你會發現在JDK的java.util.concurrent包非常優化,便捷對象。
我可以建議作者Brian Goetz的「Java併發實踐」,一本很好的書解釋有關Java和java.util.concurrent包也穿了很多東西。
0
這實際上取決於您的使用情況。如果你實際上意味着的ArrayList並不僅僅是陣列,那麼你可能會推出自己和條帶你的鎖,爲的ArrayList可以調整這才能真正搞砸未sychronized讀取和寫入。
但是,如果實際上您的意思是陣列,我不確定我明白你的意思。你不需要鎖,沒有鎖就能正常工作。另一個線程可能不會馬上看到變化,但那不是世界末日。
相關問題
- 1. 在範圍鎖定之前檢查可選的互斥鎖
- 2. 在Java中獲得獨佔系統範圍的鎖
- 3. 範圍在Java
- 4. 範圍在Java
- 5. 範圍鎖定工作如何?
- 6. 如何強制鍵範圍鎖定
- 7. 如何正確範圍鎖定
- 8. 互斥/鎖定與範圍/代碼塊
- 9. Boost範圍鎖定斷言失敗
- 10. 我該如何返回範圍鎖定?
- 11. 在Java中簡化範圍
- 12. 從主鍵索引上的範圍鎖定發生死鎖
- 13. postgresql中的諮詢鎖範圍
- 14. 事務範圍鎖表
- 15. 什麼是範圍鎖?
- 16. 如何在C中使用多個變量鎖定範圍#
- 17. 在C++中使用範圍自動鎖定/解鎖(來自C#背景)
- 18. Libgdx鎖定縱橫比在一定範圍內
- 19. Java中的日期範圍
- 20. java中的範圍變量
- 21. Java中的範圍規則
- 22. Java中的變量範圍
- 23. Java中的範圍滑塊
- 24. Java中的變量範圍
- 25. Java中的Fibonacci範圍
- 26. 陣列Java中的範圍
- 27. Java的int範圍?
- 28. 的Java servlet範圍
- 29. 在Java中的範圍查找
- 30. 卡住在Java中的對象範圍
如果陣列只訪問並沒有修改,那麼你不需要任何類型的鎖。 (假設在線程開始讀取之前數組已完全填充,以確保發佈初始更改。) – mdma 2010-07-21 19:37:13