private V load(K key) { if (entryLoader == null && expiringEntryLoader == null) return null; writeLock.lock(); try { // Double check for entry ExpiringEntry<K, V> entry = getEntry(key); if (entry != null) return entry.getValue(); if (entryLoader != null) { V value = entryLoader.load(key); put(key, value); return value; } else { ExpiringValue<? extends V> expiringValue = expiringEntryLoader.load(key); if (expiringValue == null) { put(key, null); return null; } else { long duration = expiringValue.getTimeUnit() == null ? expirationNanos.get() : expiringValue.getDuration(); TimeUnit timeUnit = expiringValue.getTimeUnit() == null ? TimeUnit.NANOSECONDS : expiringValue.getTimeUnit(); put(key, expiringValue.getValue(), expiringValue.getExpirationPolicy() == null ? expirationPolicy.get() : expiringValue.getExpirationPolicy(), duration, timeUnit); return expiringValue.getValue(); } } } finally { writeLock.unlock(); } }
private V load(K key) { if (entryLoader == null && expiringEntryLoader == null) return null; writeLock.lock(); try { // Double check for entry ExpiringEntry<K, V> entry = getEntry(key); if (entry != null) return entry.getValue(); if (entryLoader != null) { V value = entryLoader.load(key); put(key, value); return value; } else { ExpiringValue<? extends V> expiringValue = expiringEntryLoader.load(key); if (expiringValue == null) { put(key, null); return null; } else { long duration = expiringValue.getTimeUnit() == null ? expirationNanos.get() : expiringValue.getDuration(); TimeUnit timeUnit = expiringValue.getTimeUnit() == null ? TimeUnit.NANOSECONDS : expiringValue.getTimeUnit(); put(key, expiringValue.getValue(), expiringValue.getExpirationPolicy() == null ? expirationPolicy.get() : expiringValue.getExpirationPolicy(), duration, timeUnit); return expiringValue.getValue(); } } } finally { writeLock.unlock(); } }
private V load(K key) { if (entryLoader == null && expiringEntryLoader == null) return null; writeLock.lock(); try { // Double check for entry ExpiringEntry<K, V> entry = getEntry(key); if (entry != null) return entry.getValue(); if (entryLoader != null) { V value = entryLoader.load(key); put(key, value); return value; } else { ExpiringValue<? extends V> expiringValue = expiringEntryLoader.load(key); if (expiringValue == null) { put(key, null); return null; } else { long duration = expiringValue.getTimeUnit() == null ? expirationNanos.get() : expiringValue.getDuration(); TimeUnit timeUnit = expiringValue.getTimeUnit() == null ? TimeUnit.NANOSECONDS : expiringValue.getTimeUnit(); put(key, expiringValue.getValue(), expiringValue.getExpirationPolicy() == null ? expirationPolicy.get() : expiringValue.getExpirationPolicy(), duration, timeUnit); return expiringValue.getValue(); } } } finally { writeLock.unlock(); } }