如何避免循环终止中的方法调用

时间:2014-05-12 13:29:01

标签: java

我有以下方法,我试图避免来自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)))

1 个答案:

答案 0 :(得分:1)

简要翻译:
从索引处开始,然后循环遍历数组,直到:

你找到了你要找的钥匙 OR
您找到了一个空键并设法将密钥插入其中 OR
发生了竞争条件,另一个线程将您的密钥插入您正在检查的位置。