diff --git a/jetcache-core/src/main/java/com/alicp/jetcache/support/DecoderMap.java b/jetcache-core/src/main/java/com/alicp/jetcache/support/DecoderMap.java
index 5d492a3a4..7c9dc5a40 100644
--- a/jetcache-core/src/main/java/com/alicp/jetcache/support/DecoderMap.java
+++ b/jetcache-core/src/main/java/com/alicp/jetcache/support/DecoderMap.java
@@ -30,14 +30,24 @@ public AbstractValueDecoder getDecoder(int identityNumber) {
return decoderMap.get(identityNumber);
}
- public synchronized void register(int identityNumber, AbstractValueDecoder decoder) {
- decoderMap.put(identityNumber, decoder);
- inited = true;
+ public void register(int identityNumber, AbstractValueDecoder decoder) {
+ reentrantLock.lock();
+ try {
+ decoderMap.put(identityNumber, decoder);
+ inited = true;
+ }finally {
+ reentrantLock.unlock();
+ }
}
- public synchronized void clear() {
- decoderMap.clear();
- inited = true;
+ public void clear() {
+ reentrantLock.lock();
+ try {
+ decoderMap.clear();
+ inited = true;
+ }finally {
+ reentrantLock.unlock();
+ }
}
public void initDefaultDecoder() {
diff --git a/jetcache-core/src/main/java/com/alicp/jetcache/support/DefaultCacheMonitor.java b/jetcache-core/src/main/java/com/alicp/jetcache/support/DefaultCacheMonitor.java
index 7b10c7e5d..1e94f7576 100644
--- a/jetcache-core/src/main/java/com/alicp/jetcache/support/DefaultCacheMonitor.java
+++ b/jetcache-core/src/main/java/com/alicp/jetcache/support/DefaultCacheMonitor.java
@@ -18,6 +18,7 @@
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.locks.ReentrantLock;
/**
* Created on 2016/10/27.
@@ -28,6 +29,7 @@ public class DefaultCacheMonitor implements CacheMonitor {
private static final Logger logger = LoggerFactory.getLogger(DefaultCacheMonitor.class);
+ private final ReentrantLock reentrantLock = new ReentrantLock();
protected CacheStat cacheStat;
private String cacheName;
@@ -43,44 +45,59 @@ public String getCacheName() {
return cacheName;
}
- public synchronized void resetStat() {
- cacheStat = new CacheStat();
- cacheStat.setStatStartTime(System.currentTimeMillis());
- cacheStat.setCacheName(cacheName);
+ public void resetStat() {
+ reentrantLock.lock();
+ try {
+ cacheStat = new CacheStat();
+ cacheStat.setStatStartTime(System.currentTimeMillis());
+ cacheStat.setCacheName(cacheName);
+ }finally {
+ reentrantLock.unlock();
+ }
}
- public synchronized CacheStat getCacheStat() {
- CacheStat stat = cacheStat.clone();
- stat.setStatEndTime(System.currentTimeMillis());
- return stat;
+ public CacheStat getCacheStat() {
+ reentrantLock.lock();
+ try {
+ CacheStat stat = cacheStat.clone();
+ stat.setStatEndTime(System.currentTimeMillis());
+ return stat;
+ }finally {
+ reentrantLock.unlock();
+ }
}
@Override
- public synchronized void afterOperation(CacheEvent event) {
- if (event instanceof CacheGetEvent) {
- CacheGetEvent e = (CacheGetEvent) event;
- afterGet(e.getMillis(), e.getKey(), e.getResult());
- } else if (event instanceof CachePutEvent) {
- CachePutEvent e = (CachePutEvent) event;
- afterPut(e.getMillis(), e.getKey(), e.getValue(), e.getResult());
- } else if (event instanceof CacheRemoveEvent) {
- CacheRemoveEvent e = (CacheRemoveEvent) event;
- afterRemove(e.getMillis(), e.getKey(), e.getResult());
- } else if (event instanceof CacheLoadEvent) {
- CacheLoadEvent e = (CacheLoadEvent) event;
- afterLoad(e.getMillis(), e.getKey(), e.getLoadedValue(), e.isSuccess());
- } else if (event instanceof CacheGetAllEvent) {
- CacheGetAllEvent e = (CacheGetAllEvent) event;
- afterGetAll(e.getMillis(), e.getKeys(), e.getResult());
- } else if (event instanceof CacheLoadAllEvent) {
- CacheLoadAllEvent e = (CacheLoadAllEvent) event;
- afterLoadAll(e.getMillis(), e.getKeys(), e.getLoadedValue(), e.isSuccess());
- } else if (event instanceof CachePutAllEvent) {
- CachePutAllEvent e = (CachePutAllEvent) event;
- afterPutAll(e.getMillis(), e.getMap(), e.getResult());
- } else if (event instanceof CacheRemoveAllEvent) {
- CacheRemoveAllEvent e = (CacheRemoveAllEvent) event;
- afterRemoveAll(e.getMillis(), e.getKeys(), e.getResult());
+ public void afterOperation(CacheEvent event) {
+ reentrantLock.lock();
+ try {
+ if (event instanceof CacheGetEvent) {
+ CacheGetEvent e = (CacheGetEvent) event;
+ afterGet(e.getMillis(), e.getKey(), e.getResult());
+ } else if (event instanceof CachePutEvent) {
+ CachePutEvent e = (CachePutEvent) event;
+ afterPut(e.getMillis(), e.getKey(), e.getValue(), e.getResult());
+ } else if (event instanceof CacheRemoveEvent) {
+ CacheRemoveEvent e = (CacheRemoveEvent) event;
+ afterRemove(e.getMillis(), e.getKey(), e.getResult());
+ } else if (event instanceof CacheLoadEvent) {
+ CacheLoadEvent e = (CacheLoadEvent) event;
+ afterLoad(e.getMillis(), e.getKey(), e.getLoadedValue(), e.isSuccess());
+ } else if (event instanceof CacheGetAllEvent) {
+ CacheGetAllEvent e = (CacheGetAllEvent) event;
+ afterGetAll(e.getMillis(), e.getKeys(), e.getResult());
+ } else if (event instanceof CacheLoadAllEvent) {
+ CacheLoadAllEvent e = (CacheLoadAllEvent) event;
+ afterLoadAll(e.getMillis(), e.getKeys(), e.getLoadedValue(), e.isSuccess());
+ } else if (event instanceof CachePutAllEvent) {
+ CachePutAllEvent e = (CachePutAllEvent) event;
+ afterPutAll(e.getMillis(), e.getMap(), e.getResult());
+ } else if (event instanceof CacheRemoveAllEvent) {
+ CacheRemoveAllEvent e = (CacheRemoveAllEvent) event;
+ afterRemoveAll(e.getMillis(), e.getKeys(), e.getResult());
+ }
+ }finally {
+ reentrantLock.unlock();
}
}
diff --git a/jetcache-support/jetcache-redis-lettuce/src/main/java/com/alicp/jetcache/redis/lettuce/LettuceBroadcastManager.java b/jetcache-support/jetcache-redis-lettuce/src/main/java/com/alicp/jetcache/redis/lettuce/LettuceBroadcastManager.java
index db6f0b7ea..c5b99f83a 100644
--- a/jetcache-support/jetcache-redis-lettuce/src/main/java/com/alicp/jetcache/redis/lettuce/LettuceBroadcastManager.java
+++ b/jetcache-support/jetcache-redis-lettuce/src/main/java/com/alicp/jetcache/redis/lettuce/LettuceBroadcastManager.java
@@ -20,6 +20,8 @@
import org.slf4j.LoggerFactory;
import java.nio.charset.StandardCharsets;
+import java.util.concurrent.locks.ReentrantLock;
+
/**
* @author huangli
*/
@@ -35,6 +37,8 @@ public class LettuceBroadcastManager extends BroadcastManager {
private final LettuceConnectionManager lettuceConnectionManager;
private final BaseRedisAsyncCommands stringAsyncCommands;
+ private final ReentrantLock reentrantLock = new ReentrantLock();
+
public LettuceBroadcastManager(CacheManager cacheManager, RedisLettuceCacheConfig