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);
+            }
         }
     }
 }

Reply via email to