WarpPI/core/src/main/java/it/cavallium/warppi/CacheUtils.java

42 lines
1.1 KiB
Java

package it.cavallium.warppi;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Supplier;
public class CacheUtils {
private static final Map<String, Object> cache = Collections.synchronizedMap(new HashMap<>());
private static final Map<String, Long> time = Collections.synchronizedMap(new HashMap<>());
@SuppressWarnings("unchecked")
public static <T> T get(String entryName, long expireDelta, Supplier<T> function) {
refreshEntry(entryName);
synchronized (cache) {
if (cache.containsKey(entryName)) {
return (T) cache.get(entryName);
} else {
time.put(entryName, System.currentTimeMillis() + expireDelta);
T result = function.get();
cache.put(entryName, result);
return result;
}
}
}
private static void refreshEntry(String entryName) {
synchronized (time) {
synchronized (cache) {
if (time.containsKey(entryName)) {
if (time.get(entryName) <= System.currentTimeMillis()) {
time.remove(entryName);
cache.remove(entryName);
}
}
}
}
}
}