You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by do...@apache.org on 2009/11/23 04:07:01 UTC

svn commit: r883230 - /ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java

Author: doogie
Date: Mon Nov 23 03:07:01 2009
New Revision: 883230

URL: http://svn.apache.org/viewvc?rev=883230&view=rev
Log:
Switch to ConcurrentHashMap for utilCacheTable.

Modified:
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java?rev=883230&r1=883229&r2=883230&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/cache/UtilCache.java Mon Nov 23 03:07:01 2009
@@ -27,7 +27,6 @@
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 import java.util.Set;
-import java.util.WeakHashMap;
 import java.util.concurrent.ConcurrentHashMap;
 
 import javolution.util.FastList;
@@ -53,7 +52,7 @@
     public static final String module = UtilCache.class.getName();
 
     /** A static Map to keep track of all of the UtilCache instances. */
-    private static final Map<String, UtilCache<?, ?>> utilCacheTable = new WeakHashMap<String, UtilCache<?, ?>>();
+    private static final ConcurrentHashMap<String, UtilCache<?, ?>> utilCacheTable = new ConcurrentHashMap<String, UtilCache<?, ?>>();
 
     /** An index number appended to utilCacheTable names when there are conflicts. */
     private final static ConcurrentHashMap<String, Integer> defaultIndices = new ConcurrentHashMap<String, Integer>();
@@ -640,17 +639,14 @@
 
     @SuppressWarnings("unchecked")
     public static <K, V> UtilCache<K, V> getOrCreateUtilCache(String name, int maxSize, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore, String... names) {
-        UtilCache<K, V> cache;
         String cacheName = name + getNextDefaultIndex(name);
-
-        synchronized (utilCacheTable) {
-            cache = (UtilCache<K, V>) utilCacheTable.get(cacheName);
-            if (cache == null) {
-                cache = new UtilCache<K, V>(cacheName, maxSize, maxInMemory, expireTime, useSoftReference, useFileSystemStore, name, names);
-                utilCacheTable.put(cacheName, cache);
-            }
+        UtilCache<K, V> newCache = new UtilCache<K, V>(cacheName, maxSize, maxInMemory, expireTime, useSoftReference, useFileSystemStore, name, names);
+        UtilCache<K, V> oldCache = (UtilCache<K, V>) utilCacheTable.putIfAbsent(cacheName, newCache);
+        if (oldCache == null) {
+            return newCache;
+        } else {
+            return oldCache;
         }
-        return cache;
     }
 
     public static <K, V> UtilCache<K, V> createUtilCache(String name, int maxSize, int maxInMemory, long expireTime, boolean useSoftReference, boolean useFileSystemStore, String... names) {
@@ -694,9 +690,7 @@
     }
 
     private static <K, V> UtilCache<K, V> storeCache(UtilCache<K, V> cache) {
-        synchronized (utilCacheTable) {
-            utilCacheTable.put(cache.getName(), cache);
-        }
+        utilCacheTable.put(cache.getName(), cache);
         return cache;
     }