@Override public boolean schedule(long delayMillis, K key, V value) { if (scheduleType.equals(ScheduleType.POSTPONE)) { return schedulePostponeEntry(delayMillis, key, value); } else if (scheduleType.equals(ScheduleType.FOR_EACH)) { return scheduleEntry(delayMillis, key, value); } throw new RuntimeException("Undefined schedule type."); }
@Override public boolean schedule(long delayMillis, K key, V value) { if (scheduleType.equals(ScheduleType.POSTPONE)) { return schedulePostponeEntry(delayMillis, key, value); } else if (scheduleType.equals(ScheduleType.FOR_EACH)) { return scheduleEntry(delayMillis, key, value); } throw new RuntimeException("Undefined schedule type."); }
@Override public ScheduledEntry<K, V> get(K key) { synchronized (mutex) { if (scheduleType.equals(ScheduleType.FOR_EACH)) { return getByCompositeKey(key); } Integer second = secondsOfKeys.get(key); if (second != null) { Map<Object, ScheduledEntry<K, V>> entries = scheduledEntries.get(second); if (entries != null) { return entries.get(key); } } return null; } }
@Override public ScheduledEntry<K, V> get(K key) { synchronized (mutex) { if (scheduleType.equals(ScheduleType.FOR_EACH)) { return getByCompositeKey(key); } Integer second = secondsOfKeys.get(key); if (second != null) { Map<Object, ScheduledEntry<K, V>> entries = scheduledEntries.get(second); if (entries != null) { return entries.get(key); } } return null; } }
@Override public ScheduledEntry<K, V> cancel(K key) { synchronized (mutex) { if (scheduleType.equals(ScheduleType.FOR_EACH)) { return cancelByCompositeKey(key); } Integer second = secondsOfKeys.remove(key); if (second == null) { return null; } Map<Object, ScheduledEntry<K, V>> entries = scheduledEntries.get(second); if (entries == null) { return null; } return cancelAndCleanUpIfEmpty(second, entries, key); } }
@Override public ScheduledEntry<K, V> cancel(K key) { synchronized (mutex) { if (scheduleType.equals(ScheduleType.FOR_EACH)) { return cancelByCompositeKey(key); } Integer second = secondsOfKeys.remove(key); if (second == null) { return null; } Map<Object, ScheduledEntry<K, V>> entries = scheduledEntries.get(second); if (entries == null) { return null; } return cancelAndCleanUpIfEmpty(second, entries, key); } }
@Override public int cancelIfExists(K key, V value) { synchronized (mutex) { ScheduledEntry<K, V> scheduledEntry = new ScheduledEntry<K, V>(key, value, 0, 0, 0); if (scheduleType.equals(ScheduleType.FOR_EACH)) { return cancelByCompositeKey(key, scheduledEntry); } Integer second = secondsOfKeys.remove(key); if (second == null) { return 0; } Map<Object, ScheduledEntry<K, V>> entries = scheduledEntries.get(second); if (entries == null) { return 0; } return cancelAndCleanUpIfEmpty(second, entries, key, scheduledEntry) ? 1 : 0; } }
@Override public int cancelIfExists(K key, V value) { synchronized (mutex) { ScheduledEntry<K, V> scheduledEntry = new ScheduledEntry<K, V>(key, value, 0, 0, 0); if (scheduleType.equals(ScheduleType.FOR_EACH)) { return cancelByCompositeKey(key, scheduledEntry); } Integer second = secondsOfKeys.remove(key); if (second == null) { return 0; } Map<Object, ScheduledEntry<K, V>> entries = scheduledEntries.get(second); if (entries == null) { return 0; } return cancelAndCleanUpIfEmpty(second, entries, key, scheduledEntry) ? 1 : 0; } }