This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-jcs.git
commit ebde5f35fdc4cd858ba2a529355aef9a5ef94908 Author: Thomas Vandahl <[email protected]> AuthorDate: Mon Sep 7 10:06:13 2026 +0200 Use ConcurrentMap again --- .../memory/AbstractDoubleLinkedListMemoryCache.java | 20 ++------------------ .../jcs4/engine/memory/AbstractMemoryCache.java | 16 ++++++++-------- .../jcs4/engine/memory/lru/LHMLRUMemoryCache.java | 6 ++++-- .../engine/memory/soft/SoftReferenceMemoryCache.java | 9 ++++++--- 4 files changed, 20 insertions(+), 31 deletions(-) diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractDoubleLinkedListMemoryCache.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractDoubleLinkedListMemoryCache.java index 351aa928..9eb2bb25 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractDoubleLinkedListMemoryCache.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractDoubleLinkedListMemoryCache.java @@ -22,6 +22,7 @@ package org.apache.commons.jcs4.engine.memory; import java.io.IOException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import org.apache.commons.jcs4.engine.behavior.ICacheElement; import org.apache.commons.jcs4.engine.control.CompositeCache; @@ -93,7 +94,6 @@ public abstract class AbstractDoubleLinkedListMemoryCache<K, V> extends Abstract /** * Children implement this to control the cache expiration algorithm - * <p> * * @param me the current cache element */ @@ -105,27 +105,11 @@ public abstract class AbstractDoubleLinkedListMemoryCache<K, V> extends Abstract * @return new HashMap() */ @Override - protected Map<K, MemoryElementDescriptor<K, V>> createMap() + protected ConcurrentMap<K, MemoryElementDescriptor<K, V>> createMap() { return new ConcurrentHashMap<>(); } - /** - * @see org.apache.commons.jcs4.engine.memory.AbstractMemoryCache#get(Object) - */ - @Override - public ICacheElement<K, V> get(final K key) - { - final ICacheElement<K, V> ce = super.get(key); - - if (log.isTraceEnabled()) - { - verifyCache(); - } - - return ce; - } - /** * This returns semi-structured information on the memory cache, such as the size, put count, * hit count, and miss count. diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractMemoryCache.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractMemoryCache.java index 8d6a75fb..799b420f 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractMemoryCache.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractMemoryCache.java @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; import java.util.Set; +import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -68,7 +69,7 @@ public abstract class AbstractMemoryCache<K, V> protected final ReadWriteLock lock = new ReentrantReadWriteLock(); /** Map where items are stored by key. This is created by the concrete child class. */ - private Map<K, MemoryElementDescriptor<K, V>> map; + private ConcurrentMap<K, MemoryElementDescriptor<K, V>> map; /** Number of hits */ private AtomicLong hitCnt; @@ -85,7 +86,7 @@ public abstract class AbstractMemoryCache<K, V> * * @return A Map */ - protected abstract Map<K, MemoryElementDescriptor<K, V>> createMap(); + protected abstract ConcurrentMap<K, MemoryElementDescriptor<K, V>> createMap(); /** * Get a read-only map view @@ -160,19 +161,18 @@ public abstract class AbstractMemoryCache<K, V> @Override public ICacheElement<K, V> get(final K key) { - ICacheElement<K, V> ce = null; + MemoryElementDescriptor<K, V> me = null; log.debug("{0}: getting item for key {1}", this::getCacheName, () -> key); lock.writeLock().lock(); try { - final MemoryElementDescriptor<K, V> me = map.get(key); + me = map.get(key); if (me != null) { lockedGetElement(me); - ce = me.getCacheElement(); } } finally @@ -180,18 +180,18 @@ public abstract class AbstractMemoryCache<K, V> lock.writeLock().unlock(); } - if (ce == null) + if (me == null) { missCnt.incrementAndGet(); log.debug("{0}: MemoryCache miss for {1}", this::getCacheName, () -> key); + return null; } else { hitCnt.incrementAndGet(); log.debug("{0}: MemoryCache hit for {1}", this::getCacheName, () -> key); + return me.getCacheElement(); } - - return ce; } /** diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/lru/LHMLRUMemoryCache.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/lru/LHMLRUMemoryCache.java index d00e8153..a63f1d0e 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/lru/LHMLRUMemoryCache.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/lru/LHMLRUMemoryCache.java @@ -22,6 +22,7 @@ package org.apache.commons.jcs4.engine.memory.lru; import java.io.IOException; import java.util.LinkedHashMap; import java.util.Map; +import java.util.concurrent.ConcurrentMap; import org.apache.commons.jcs4.engine.behavior.ICacheElement; import org.apache.commons.jcs4.engine.memory.AbstractMemoryCache; @@ -35,7 +36,7 @@ public class LHMLRUMemoryCache<K, V> extends AbstractMemoryCache<K, V> { /** The Logger. */ - private static final Log log = Log.getLog( LRUMemoryCache.class ); + private static final Log log = Log.getLog( LHMLRUMemoryCache.class ); static { @@ -46,6 +47,7 @@ public class LHMLRUMemoryCache<K, V> * Implements removeEldestEntry from {@link LinkedHashMap}. */ protected class LHMSpooler extends LinkedHashMap<K, MemoryElementDescriptor<K, V>> + implements ConcurrentMap<K, MemoryElementDescriptor<K, V>> { /** Don't change. */ private static final long serialVersionUID = -1255907868906762484L; @@ -90,7 +92,7 @@ public class LHMLRUMemoryCache<K, V> * @return new LHMSpooler() */ @Override - protected Map<K, MemoryElementDescriptor<K, V>> createMap() + protected ConcurrentMap<K, MemoryElementDescriptor<K, V>> createMap() { return new LHMSpooler(); } diff --git a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/soft/SoftReferenceMemoryCache.java b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/soft/SoftReferenceMemoryCache.java index 67515a1a..4225db08 100644 --- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/soft/SoftReferenceMemoryCache.java +++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/soft/SoftReferenceMemoryCache.java @@ -21,9 +21,9 @@ package org.apache.commons.jcs4.engine.memory.soft; import java.io.IOException; import java.lang.ref.SoftReference; -import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import java.util.concurrent.LinkedBlockingQueue; import java.util.stream.Collectors; @@ -64,7 +64,7 @@ public class SoftReferenceMemoryCache<K, V> extends AbstractMemoryCache<K, V> * @see org.apache.commons.jcs4.engine.memory.AbstractMemoryCache#createMap() */ @Override - protected Map<K, MemoryElementDescriptor<K, V>> createMap() + protected ConcurrentMap<K, MemoryElementDescriptor<K, V>> createMap() { return new ConcurrentHashMap<>(); } @@ -234,7 +234,10 @@ public class SoftReferenceMemoryCache<K, V> extends AbstractMemoryCache<K, V> for (int cursize = startsize; cursize > max; cursize--) { final ICacheElement<K, V> ce = strongReferences.poll(); - waterfall(ce); + if (ce != null) + { + waterfall(ce); + } } } }
