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]