aplcache

Details

diff --git a/src/main/java/br/ufrgs/inf/prosoft/aplcache/caching/APLCache.java b/src/main/java/br/ufrgs/inf/prosoft/aplcache/caching/APLCache.java
index 9a05f2a..2cf1c2b 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/aplcache/caching/APLCache.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/aplcache/caching/APLCache.java
@@ -138,16 +138,18 @@ public class APLCache<V> {
 
         String serialisedParameters = Stream.of(parameters).map(JSONSerialiser::serialise)
                 .collect(Collectors.joining(",", "[", "]"));
-        Optional<V> optional = this.multiCache.get(serialisedParameters);
-        if (optional != null) {
-            return optional.orElse(null);
+        synchronized (serialisedParameters) {
+            Optional<V> optional = this.multiCache.get(serialisedParameters);
+            if (optional != null) {
+                return optional.orElse(null);
+            }
+            V get = supplier.get();
+            optional = Optional.ofNullable(get);
+            if (isCacheable(methodName, serialisedParameters)) {
+                this.multiCache.put(serialisedParameters, optional, timeToLive);
+            }
+            return get;
         }
-        V get = supplier.get();
-        optional = Optional.ofNullable(get);
-        if (isCacheable(methodName, serialisedParameters)) {
-            this.multiCache.put(serialisedParameters, optional, timeToLive);
-        }
-        return get;
     }
 
     public V computeIfAbsent(Thread currentThread, Object[] parameters, Supplier<V> supplier) {
@@ -162,16 +164,18 @@ public class APLCache<V> {
 
         String serialisedParameters = Stream.of(parameters).map(JSONSerialiser::serialise)
                 .collect(Collectors.joining(",", "[", "]"));
-        Optional<V> optional = this.multiCache.get(serialisedParameters);
-        if (optional != null) {
-            return optional.orElse(null);
-        }
-        V get = supplier.get();
-        optional = Optional.ofNullable(get);
-        if (isCacheable(methodName, serialisedParameters)) {
-            this.multiCache.put(serialisedParameters, optional);
+        synchronized (serialisedParameters) {
+            Optional<V> optional = this.multiCache.get(serialisedParameters);
+            if (optional != null) {
+                return optional.orElse(null);
+            }
+            V get = supplier.get();
+            optional = Optional.ofNullable(get);
+            if (isCacheable(methodName, serialisedParameters)) {
+                this.multiCache.put(serialisedParameters, optional);
+            }
+            return get;
         }
-        return get;
     }
 
     private static void log(String message) {