cache

Details

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;
     }
 }