You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2011/05/20 20:45:44 UTC

svn commit: r1125501 - /james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/CachingUidProvider.java

Author: norman
Date: Fri May 20 18:45:44 2011
New Revision: 1125501

URL: http://svn.apache.org/viewvc?rev=1125501&view=rev
Log:
Use concurrent classes to get rid of synchronized block

Modified:
    james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/CachingUidProvider.java

Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/CachingUidProvider.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/CachingUidProvider.java?rev=1125501&r1=1125500&r2=1125501&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/CachingUidProvider.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/CachingUidProvider.java Fri May 20 18:45:44 2011
@@ -18,8 +18,7 @@
  ****************************************************************/
 package org.apache.james.mailbox.store.mail;
 
-import java.util.HashMap;
-import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.james.mailbox.MailboxException;
@@ -35,7 +34,7 @@ import org.apache.james.mailbox.store.ma
  */
 public abstract class CachingUidProvider<Id> implements UidProvider<Id>{
 
-    private final Map<Id, AtomicLong> uids = new HashMap<Id, AtomicLong>();
+    private final ConcurrentHashMap<Id, AtomicLong> uids = new ConcurrentHashMap<Id, AtomicLong>();
     
     /*
      * (non-Javadoc)
@@ -62,15 +61,16 @@ public abstract class CachingUidProvider
      * @throws MailboxException
      */
     protected AtomicLong retrieveLastUid(MailboxSession session, Mailbox<Id> mailbox) throws MailboxException {
-        AtomicLong uid;
-        synchronized (uids) {
-            uid = uids.get(mailbox.getMailboxId());
-            if (uid == null) {
-                uid = new AtomicLong(getLastUid(session, mailbox));
-                uids.put(mailbox.getMailboxId(), uid);
+        AtomicLong uid = uids.get(mailbox.getMailboxId());
+
+        if (uid == null) {
+            uid = new AtomicLong(getLastUid(session, mailbox));
+            AtomicLong cachedUid = uids.putIfAbsent(mailbox.getMailboxId(), uid);
+            if (cachedUid != null) {
+                uid = cachedUid;
             }
-            
         }
+
         return uid;
     }
     



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org