Skip to content

Commit 8d9dafd

Browse files
committed
fix: concurrent problem in LinkedHashMapCache, affect 2.7.5 and 2.7.6 (#914)
1 parent 405ad14 commit 8d9dafd

File tree

1 file changed

+2
-12
lines changed

1 file changed

+2
-12
lines changed

jetcache-core/src/main/java/com/alicp/jetcache/embedded/LinkedHashMapCache.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
import org.slf4j.LoggerFactory;
1010

1111
import java.util.*;
12-
import java.util.concurrent.locks.Lock;
13-
import java.util.concurrent.locks.ReentrantReadWriteLock;
12+
import java.util.concurrent.locks.ReentrantLock;
1413

1514
/**
1615
* @author huangli
@@ -48,8 +47,7 @@ public void cleanExpiredEntry() {
4847
final class LRUMap extends LinkedHashMap implements InnerMap {
4948

5049
private final int max;
51-
// private final Object lockObj;
52-
private final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
50+
private final ReentrantLock lock = new ReentrantLock();
5351

5452
public LRUMap(int max) {
5553
super((int) (max * 1.4f), 0.75f, true);
@@ -63,7 +61,6 @@ protected boolean removeEldestEntry(Map.Entry eldest) {
6361
}
6462

6563
void cleanExpiredEntry() {
66-
Lock lock = readWriteLock.writeLock();
6764
lock.lock();
6865
long t = System.currentTimeMillis();
6966
try {
@@ -95,7 +92,6 @@ void cleanExpiredEntry() {
9592

9693
@Override
9794
public Object getValue(Object key) {
98-
Lock lock = readWriteLock.readLock();
9995
lock.lock();
10096
try{
10197
return get(key);
@@ -106,7 +102,6 @@ public Object getValue(Object key) {
106102

107103
@Override
108104
public Map getAllValues(Collection keys) {
109-
Lock lock = readWriteLock.readLock();
110105
lock.lock();
111106
Map values = new HashMap();
112107
try{
@@ -124,7 +119,6 @@ public Map getAllValues(Collection keys) {
124119

125120
@Override
126121
public void putValue(Object key, Object value) {
127-
Lock lock = readWriteLock.writeLock();
128122
lock.lock();
129123
try{
130124
put(key, value);
@@ -135,7 +129,6 @@ public void putValue(Object key, Object value) {
135129

136130
@Override
137131
public void putAllValues(Map map) {
138-
Lock lock = readWriteLock.writeLock();
139132
lock.lock();
140133
try{
141134
Set<Map.Entry> set = map.entrySet();
@@ -149,7 +142,6 @@ public void putAllValues(Map map) {
149142

150143
@Override
151144
public boolean removeValue(Object key) {
152-
Lock lock = readWriteLock.writeLock();
153145
lock.lock();
154146
try{
155147
return remove(key) != null;
@@ -160,7 +152,6 @@ public boolean removeValue(Object key) {
160152

161153
@Override
162154
public void removeAllValues(Collection keys) {
163-
Lock lock = readWriteLock.writeLock();
164155
lock.lock();
165156
try{
166157
for (Object k : keys) {
@@ -174,7 +165,6 @@ public void removeAllValues(Collection keys) {
174165
@Override
175166
@SuppressWarnings("unchecked")
176167
public boolean putIfAbsentValue(Object key, Object value) {
177-
Lock lock = readWriteLock.writeLock();
178168
lock.lock();
179169
try{
180170
CacheValueHolder h = (CacheValueHolder) get(key);

0 commit comments

Comments
 (0)