@Override public boolean replace(K key, V oldValue, V newValue) { Assert.notNull(key, "key"); writeLock.lock(); try { ExpiringEntry<K, V> entry = entries.get(key); if (entry != null && entry.getValue().equals(oldValue)) { putInternal(key, newValue, expirationPolicy.get(), expirationNanos.get()); return true; } else return false; } finally { writeLock.unlock(); } }
@Override public boolean replace(K key, V oldValue, V newValue) { Assert.notNull(key, "key"); writeLock.lock(); try { ExpiringEntry<K, V> entry = entries.get(key); if (entry != null && entry.getValue().equals(oldValue)) { putInternal(key, newValue, expirationPolicy.get(), expirationNanos.get()); return true; } else return false; } finally { writeLock.unlock(); } }
@Override public boolean replace(K key, V oldValue, V newValue) { Assert.notNull(key, "key"); writeLock.lock(); try { ExpiringEntry<K, V> entry = entries.get(key); if (entry != null && entry.getValue().equals(oldValue)) { putInternal(key, newValue, expirationPolicy.get(), expirationNanos.get()); return true; } else return false; } 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(); } }
/** * Notifies expiration listeners that the given entry expired. Must not be called from within a locked context. * * @param entry Entry to expire */ void notifyListeners(final ExpiringEntry<K, V> entry) { if (asyncExpirationListeners != null) for (final ExpirationListener<K, V> listener : asyncExpirationListeners) { LISTENER_SERVICE.execute(new Runnable() { public void run() { try { listener.expired(entry.key, entry.getValue()); } catch (Exception ignoreUserExceptions) { } } }); } if (expirationListeners != null) for (final ExpirationListener<K, V> listener : expirationListeners) { try { listener.expired(entry.key, entry.getValue()); } catch (Exception ignoreUserExceptions) { } } }
/** * Notifies expiration listeners that the given entry expired. Must not be called from within a locked context. * * @param entry Entry to expire */ void notifyListeners(final ExpiringEntry<K, V> entry) { if (asyncExpirationListeners != null) for (final ExpirationListener<K, V> listener : asyncExpirationListeners) { LISTENER_SERVICE.execute(new Runnable() { public void run() { try { listener.expired(entry.key, entry.getValue()); } catch (Exception ignoreUserExceptions) { } } }); } if (expirationListeners != null) for (final ExpirationListener<K, V> listener : expirationListeners) { try { listener.expired(entry.key, entry.getValue()); } catch (Exception ignoreUserExceptions) { } } }
/** * Notifies expiration listeners that the given entry expired. Must not be called from within a locked context. * * @param entry Entry to expire */ void notifyListeners(final ExpiringEntry<K, V> entry) { if (asyncExpirationListeners != null) for (final ExpirationListener<K, V> listener : asyncExpirationListeners) { LISTENER_SERVICE.execute(new Runnable() { public void run() { try { listener.expired(entry.key, entry.getValue()); } catch (Exception ignoreUserExceptions) { } } }); } if (expirationListeners != null) for (final ExpirationListener<K, V> listener : expirationListeners) { try { listener.expired(entry.key, entry.getValue()); } catch (Exception ignoreUserExceptions) { } } }
@Override public boolean remove(Object key, Object value) { Assert.notNull(key, "key"); writeLock.lock(); try { ExpiringEntry<K, V> entry = entries.get(key); if (entry != null && entry.getValue().equals(value)) { entries.remove(key); if (entry.cancel()) scheduleEntry(entries.first()); return true; } else return false; } finally { writeLock.unlock(); } }
@Override public boolean remove(Object key, Object value) { Assert.notNull(key, "key"); writeLock.lock(); try { ExpiringEntry<K, V> entry = entries.get(key); if (entry != null && entry.getValue().equals(value)) { entries.remove(key); if (entry.cancel()) scheduleEntry(entries.first()); return true; } else return false; } finally { writeLock.unlock(); } }
@Override public boolean remove(Object key, Object value) { Assert.notNull(key, "key"); writeLock.lock(); try { ExpiringEntry<K, V> entry = entries.get(key); if (entry != null && entry.getValue().equals(value)) { entries.remove(key); if (entry.cancel()) scheduleEntry(entries.first()); return true; } else return false; } finally { writeLock.unlock(); } }
@Override public V remove(Object key) { Assert.notNull(key, "key"); writeLock.lock(); try { ExpiringEntry<K, V> entry = entries.remove(key); if (entry == null) return null; if (entry.cancel()) scheduleEntry(entries.first()); return entry.getValue(); } finally { writeLock.unlock(); } }
@Override public V remove(Object key) { Assert.notNull(key, "key"); writeLock.lock(); try { ExpiringEntry<K, V> entry = entries.remove(key); if (entry == null) return null; if (entry.cancel()) scheduleEntry(entries.first()); return entry.getValue(); } finally { writeLock.unlock(); } }
@Override public V remove(Object key) { Assert.notNull(key, "key"); writeLock.lock(); try { ExpiringEntry<K, V> entry = entries.remove(key); if (entry == null) return null; if (entry.cancel()) scheduleEntry(entries.first()); return entry.getValue(); } finally { writeLock.unlock(); } }
@Override public V putIfAbsent(K key, V value) { Assert.notNull(key, "key"); writeLock.lock(); try { if (!entries.containsKey(key)) return putInternal(key, value, expirationPolicy.get(), expirationNanos.get()); else return entries.get(key).getValue(); } finally { writeLock.unlock(); } }
@Override public V putIfAbsent(K key, V value) { Assert.notNull(key, "key"); writeLock.lock(); try { if (!entries.containsKey(key)) return putInternal(key, value, expirationPolicy.get(), expirationNanos.get()); else return entries.get(key).getValue(); } finally { writeLock.unlock(); } }
@Override public V putIfAbsent(K key, V value) { Assert.notNull(key, "key"); writeLock.lock(); try { if (!entries.containsKey(key)) return putInternal(key, value, expirationPolicy.get(), expirationNanos.get()); else return entries.get(key).getValue(); } finally { writeLock.unlock(); } }
@Override @SuppressWarnings("unchecked") public V get(Object key) { ExpiringEntry<K, V> entry = getEntry(key); if (entry == null) { return load((K) key); } else if (ExpirationPolicy.ACCESSED.equals(entry.expirationPolicy.get())) resetEntry(entry, false); return entry.getValue(); }
@Override @SuppressWarnings("unchecked") public V get(Object key) { ExpiringEntry<K, V> entry = getEntry(key); if (entry == null) { return load((K) key); } else if (ExpirationPolicy.ACCESSED.equals(entry.expirationPolicy.get())) resetEntry(entry, false); return entry.getValue(); }
@Override @SuppressWarnings("unchecked") public V get(Object key) { ExpiringEntry<K, V> entry = getEntry(key); if (entry == null) { return load((K) key); } else if (ExpirationPolicy.ACCESSED.equals(entry.expirationPolicy.get())) resetEntry(entry, false); return entry.getValue(); }