Merge pull request #143 from jobschen/LazyCache

LazyCache - 锁机制调整
This commit is contained in:
jaysunxiao
2025-03-06 10:56:31 +08:00
committed by GitHub
@@ -8,7 +8,7 @@ import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.BiConsumer;
/**
@@ -62,7 +62,7 @@ public class LazyCache<K, V> {
private ConcurrentMap<K, Cache<K, V>> cacheMap;
private BiConsumer<List<Cache<K, V>>, RemovalCause> removeListener = (removes, removalCause) -> {
};
private final ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock();
private final ReentrantLock lock = new ReentrantLock();
public LazyCache(int maximumSize, long expireAfterAccessMillis, long expireCheckIntervalMillis, BiConsumer<List<Cache<K, V>>, RemovalCause> removeListener) {
AssertionUtils.ge1(maximumSize);
@@ -157,7 +157,7 @@ public class LazyCache<K, V> {
}
private void checkMaximumSize() {
if (rwLock.writeLock().tryLock()) { // 获取写锁
if (lock.tryLock()) { // 获取写锁
try {
if (cacheMap.size() > backPressureSize) {
var removeList = cacheMap.values()
@@ -168,7 +168,7 @@ public class LazyCache<K, V> {
removeForCause(removeList, RemovalCause.SIZE);
}
} finally {
rwLock.writeLock().unlock();
lock.unlock();
}
}
}