我有一个大数组,可以由多线程访问。单锁效率不够,java或scala中是否有范围锁类?
最佳答案
不在标准库中。不过,ConcurrentHashMap做到了这一点,在内部将哈希表表示为“段”(默认为16个段),其中每个段均由单独的锁保护。此外,this thread会问相同的问题,只是关于ArrayList而不是数组。尽管没有结果,但是如果您能够在使用上做出妥协,它会带来其他选择。
更新:AtomicReferenceArray and friends可以提供您正在寻找的效率,同时“为数组的元素提供易变的访问语义”(JCIP 15.3)。