我有一个大型数组可供多线程访问。单一锁定效率不够高。在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. 在Java中获得独占系统范围的锁
- 2. 如何正确范围锁定
- 3. Boost范围锁定断言失败
- 4. 从主键索引上的范围锁定发生死锁
- 5. postgresql中的咨询锁范围
- 6. 如何在C中使用多个变量锁定范围#
- 7. 在C++中使用范围自动锁定/解锁(来自C#背景)
- 8. java中的范围变量
- 9. Java中的变量范围
- 10. Java中的范围滑块
- 11. 阵列Java中的范围
- 12. Java中的Fibonacci范围
- 13. 这是在java中的范围?
- 14. 卡住在Java中的对象范围
- 15. 在Java中的范围查找
- 16. Java中的对象范围内的对象范围
- 17. 在java中偏向锁定
- 18. 定位范围内的一个范围
- 19. 锁前缀的范围是什么?
- 20. Vim的 - 在选定范围
- 21. Java应用范围
- 22. Java超出范围
- 23. 在java中查找数字范围
- 24. HttpURLConnection的Java的范围
- 25. 如何强制Google地图锁定在中心列的范围内?
- 26. 在Python中指定列的范围
- 27. 在VB.NET中定义Excel的范围
- 28. 在JavaScript中指定eval()的范围?
- 29. 根据日期解锁一个特定的行范围
- 30. 带范围锁定的SQL Server争用条件问题
如果阵列只访问并没有修改,那么你不需要任何类型的锁。 (假设在线程开始读取之前数组已完全填充,以确保发布初始更改。) – mdma 2010-07-21 19:37:13