diff --git a/src/main/java/br/ufrgs/inf/prosoft/cache/Cache.java b/src/main/java/br/ufrgs/inf/prosoft/cache/Cache.java
index 8336a09..044ba54 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/cache/Cache.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/cache/Cache.java
@@ -24,22 +24,26 @@ public interface Cache<K, V> {
public void invalidate(K key);
public default V computeIfAbsent(K key, Supplier<V> supplier, long timeToLive) {
- V get = get(key);
- if (get != null) {
+ synchronized (key) {
+ V get = get(key);
+ if (get != null) {
+ return get;
+ }
+ get = supplier.get();
+ put(key, get, timeToLive);
return get;
}
- get = supplier.get();
- put(key, get, timeToLive);
- return get;
}
public default V computeIfAbsent(K key, Supplier<V> supplier) {
- V get = get(key);
- if (get != null) {
+ synchronized (key) {
+ V get = get(key);
+ if (get != null) {
+ return get;
+ }
+ get = supplier.get();
+ put(key, get);
return get;
}
- get = supplier.get();
- put(key, get);
- return get;
}
}