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