java中的范围锁

java中的范围锁,java,scala,locking,range,Java,Scala,Locking,Range,我有一个大的数组可以被多个线程访问。单锁不够有效。java或scala中是否有范围锁类 将数组包装在控制访问的线程安全对象中。您可以自己管理范围,也可以将阵列拆分为多个范围,每个范围都有自己的锁,并以这种方式引用。不在标准库中。尽管如此,在内部将哈希表表示为“段”(默认情况下为16个),其中每个段都有一个单独的锁进行保护。此外,除了关于ArrayList而不是数组之外,还会询问相同的问题。虽然没有效果,但如果你能在使用上做出妥协,它会带来其他选择 更新:可能会提供您所期望的效率,同时“为数组元素

我有一个大的数组可以被多个线程访问。单锁不够有效。java或scala中是否有范围锁类

将数组包装在控制访问的线程安全对象中。您可以自己管理范围,也可以将阵列拆分为多个范围,每个范围都有自己的锁,并以这种方式引用。

不在标准库中。尽管如此,在内部将哈希表表示为“段”(默认情况下为16个),其中每个段都有一个单独的锁进行保护。此外,除了关于ArrayList而不是数组之外,还会询问相同的问题。虽然没有效果,但如果你能在使用上做出妥协,它会带来其他选择


更新:可能会提供您所期望的效率,同时“为数组元素提供易失性访问语义”(15.3)。

一般来说,除非您在并发性方面有特殊需要,您将在jdk的java.util.concurrent包中找到非常优化和方便的对象


我可以推荐Brian Goetz的《实践中的Java并发》,这是一本非常好的书,解释了Java和Java.util.concurrent包中关于线程的很多内容。

如果只访问数组而不修改数组,那么就不需要任何类型的锁。(假设在线程开始读取之前已完全填充阵列,以确保发布初始更改。)