我有以下方法,我试图避免来自while语句的方法调用,但我无法理解这段代码在做什么,有人请帮我优化这段代码。
public void count(K key,AtomicReferenceArray<K> keys) {
int index = key.hashCode() & (keys.length() - 1);
while (!key.equals(keys.get(index)) &&
!keys.compareAndSet(index, null, key) &&
!key.equals(keys.get(index))) {
if (index < keys.length() - 1) {
index++;
} else {
index = 0; //wrap
}
}
我无法理解这里发生了什么
while (!key.equals(keys.get(index)) &&
!keys.compareAndSet(index, null, key) &&
!key.equals(keys.get(index)))
答案 0 :(得分:1)
简要翻译:
从索引处开始,然后循环遍历数组,直到:
你找到了你要找的钥匙
OR
您找到了一个空键并设法将密钥插入其中
OR
发生了竞争条件,另一个线程将您的密钥插入您正在检查的位置。