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) {