@Override
    public boolean replace(@Nullable K key, final @Nullable V oldValue, final @Nullable V newValue) {
        Boolean result = doTask(key, new Task<Boolean>(TaskOption.RESTRUCTURE_BEFORE, TaskOption.SKIP_IF_EMPTY) {
            @Override
            protected Boolean execute(@Nullable Reference<K, V> ref, @Nullable Entry<K, V> entry) {
                if (entry != null && ObjectUtils.nullSafeEquals(entry.getValue(), oldValue)) {
                    entry.setValue(newValue);
                    return true;
                }
                return false;
            }
        });
        return (Boolean.TRUE.equals(result));
    }
Return a {@link Reference} to the {@link Entry} for the specified {@code key},
or {@code null} if not found.

@param key         the key (can be {@code null})
@param restructure types of restructure allowed during this call
@return the reference, or {@code null} if not found
ttl-core/src/main/java/com/alibaba/ttl3/internal/util/ConcurrentReferenceHashMap.java