Author: norman
Date: Tue May 24 08:29:57 2011
New Revision: 1126923

URL: http://svn.apache.org/viewvc?rev=1126923&view=rev
Log:
Get rid of synchronized blocks by using ConcurrentHashMap

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

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java?rev=1126923&r1=1126922&r2=1126923&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java
 Tue May 24 08:29:57 2011
@@ -19,8 +19,7 @@
 
 package org.apache.james.mailbox.store;
 
-import java.util.HashMap;
-import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.locks.ReentrantLock;
 
 import org.apache.james.mailbox.MailboxException;
@@ -37,7 +36,7 @@ import org.apache.james.mailbox.MailboxS
  */
 public final class JVMMailboxPathLocker extends AbstractMailboxPathLocker {
 
-    private final Map<MailboxPath, ReentrantLock> paths = new 
HashMap<MailboxPath, ReentrantLock>();
+    private final ConcurrentHashMap<MailboxPath, ReentrantLock> paths = new 
ConcurrentHashMap<MailboxPath, ReentrantLock>();
 
 
     /*
@@ -45,13 +44,12 @@ public final class JVMMailboxPathLocker 
      * @see 
org.apache.james.mailbox.store.AbstractMailboxPathLocker#lock(org.apache.james.mailbox.MailboxSession,
 org.apache.james.mailbox.MailboxPath)
      */
     protected void lock(MailboxSession session, MailboxPath path) throws 
MailboxException {
-        ReentrantLock lock;
-        synchronized (paths) {
-            lock = paths.get(path);
-
-            if (lock == null) {
-                lock = new ReentrantLock();
-                paths.put(path, lock);
+        ReentrantLock lock = paths.get(path);
+        if (lock == null) {
+            lock = new ReentrantLock();
+            ReentrantLock storedLock = paths.putIfAbsent(path, lock);
+            if (storedLock != null) {
+                lock = storedLock;
             }
         }
         lock.lock();        
@@ -62,10 +60,8 @@ public final class JVMMailboxPathLocker 
      * @see 
org.apache.james.mailbox.store.AbstractMailboxPathLocker#unlock(org.apache.james.mailbox.MailboxSession,
 org.apache.james.mailbox.MailboxPath)
      */
     protected void unlock(MailboxSession session, MailboxPath path) throws 
MailboxException {
-        ReentrantLock lock;
-        synchronized (paths) {
-            lock = paths.remove(path);
-        }
+        ReentrantLock lock = paths.remove(path);
+        
         if (lock != null) {
             lock.unlock();
         }        



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to