java Guava cache containsValue具体实现的疑问

public boolean containsValue(@Nullable Object value) {
        if (value == null) {
            return false;
        }
        long now = ticker.read();
        final Segment<K, V>[] segments = this.segments;
        long last = -1L;
        for (int i = 0; i < CONTAINS_VALUE_RETRIES; i++) {
            long sum = 0L;
            for (Segment<K, V> segment : segments) {
                // ensure visibility of most recent completed write
                int unused = segment.count; // read-volatile

                AtomicReferenceArray<ReferenceEntry<K, V>> table = segment.table;
                for (int j = 0; j < table.length(); j++) {
                    for (ReferenceEntry<K, V> e = table.get(j); e != null; e = e.getNext()) {
                        V v = segment.getLiveValue(e, now);
                        if (v != null && valueEquivalence.equivalent(value, v)) {
                            return true;
                        }
                    }
                }
                sum += segment.modCount;
            }
            if (sum == last) {
                break;
            }
            last = sum;
        }
        return false;
    } 

guava将containsValue设计成不加锁的操作。并且使用modCount检测在执行方法期间cache有没有变化。我的疑问是,modCount貌似只是对执行put操作做了检测,如果在该方法执行中在return true之前其他线程做了一个remove操作,是否该方法返回值就是错的。如果改为无论如何都检测modCount的次数如何?

https://www.oschina.net/question/2392786_2137691