public synchronized V put(K key, V value) {
		Objects.requireNonNull(key);
		Objects.requireNonNull(value);

		CachedValue old = map.put(key, new CachedValue(key, value));
		V previous = old == null ? null : old.getValue();
		if (!Objects.equals(value, previous)) {
			if (previous != null) {
				valueRemoved(key, previous);
			}
			valueAdded(key, value);
		}

		if (timerMonitor == null) {
			timerMonitor = GTimer.scheduleRunnable(lifetime, timerExpiredRunnable);
		}
		return previous;
	}
Adds an key,value entry to the cache
@param key the key with which the value is associated
@param value the value being cached
@return The previous value associated with the key or null if no previous value
Ghidra/Framework/Generic/src/main/java/ghidra/util/timer/GTimerCache.java