java中的范围锁定

use*_*384 7 java scala locking range

我有一个大型数组可供多个线程访问.单锁效率不高.在java或scala中有一个范围锁类吗?

Bri*_*ris 6

不在标准库中.然而,ConcurrentHashMap执行此操作,在内部将哈希表表示为"段"(默认情况下为16个),其中每个段都使用单独的锁进行保护.此外,该线程询问相同的问题,除了ArrayList而不是数组.虽然没有结果,但如果您能够在使用上妥协,它会带来替代品.

更新:也许AtomicReferenceArray 朋友会提供你正在寻找的效率,同时"为数组元素提供易变的访问语义"(JCIP 15.3).


cor*_*iKa 1

将数组包装在控制访问的线程安全对象内。您可以自己管理范围,或者将数组分成多个范围,每个范围都有自己的锁,并以这种方式引用它。