Repository: commons-lang
Updated Branches:
  refs/heads/master a06c99b9c -> f30c4607a


LANG-1230: Remove unnecessary synchronization from registry lookup in 
EqualsBuilder and HashCodeBuilder (closes #143)


Project: http://git-wip-us.apache.org/repos/asf/commons-lang/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-lang/commit/b2c1afce
Tree: http://git-wip-us.apache.org/repos/asf/commons-lang/tree/b2c1afce
Diff: http://git-wip-us.apache.org/repos/asf/commons-lang/diff/b2c1afce

Branch: refs/heads/master
Commit: b2c1afce7eb13ea44fc7d25562cc3bb83cc91b2f
Parents: a06c99b
Author: Philippe Marschall <philippe.marsch...@gmail.com>
Authored: Mon May 16 10:30:02 2016 +0200
Committer: pascalschumacher <pascalschumac...@gmx.net>
Committed: Sun Aug 21 19:14:28 2016 +0200

----------------------------------------------------------------------
 .../commons/lang3/builder/EqualsBuilder.java    | 22 +++++++-------------
 .../commons/lang3/builder/HashCodeBuilder.java  | 22 ++++++++------------
 2 files changed, 17 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-lang/blob/b2c1afce/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java 
b/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java
index b6c59de..6a1b5df 100644
--- a/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java
@@ -171,14 +171,12 @@ public class EqualsBuilder implements Builder<Boolean> {
      * @param lhs <code>this</code> object to register
      * @param rhs the other object to register
      */
-    static void register(final Object lhs, final Object rhs) {
-        synchronized (EqualsBuilder.class) {
-            if (getRegistry() == null) {
-                REGISTRY.set(new HashSet<Pair<IDKey, IDKey>>());
-            }
+    private static void register(final Object lhs, final Object rhs) {
+        Set<Pair<IDKey, IDKey>> registry = getRegistry();
+        if (registry == null) {
+            registry = new HashSet<Pair<IDKey, IDKey>>();
+            REGISTRY.set(registry);
         }
-
-        final Set<Pair<IDKey, IDKey>> registry = getRegistry();
         final Pair<IDKey, IDKey> pair = getRegisterPair(lhs, rhs);
         registry.add(pair);
     }
@@ -195,17 +193,13 @@ public class EqualsBuilder implements Builder<Boolean> {
      * @param rhs the other object to unregister
      * @since 3.0
      */
-    static void unregister(final Object lhs, final Object rhs) {
+    private static void unregister(final Object lhs, final Object rhs) {
         Set<Pair<IDKey, IDKey>> registry = getRegistry();
         if (registry != null) {
             final Pair<IDKey, IDKey> pair = getRegisterPair(lhs, rhs);
             registry.remove(pair);
-            synchronized (EqualsBuilder.class) {
-                //read again
-                registry = getRegistry();
-                if (registry != null && registry.isEmpty()) {
-                    REGISTRY.remove();
-                }
+            if (registry.isEmpty()) {
+                REGISTRY.remove();
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/commons-lang/blob/b2c1afce/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java 
b/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
index 98ed5c5..beab5fc 100644
--- a/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
@@ -497,13 +497,13 @@ public class HashCodeBuilder implements Builder<Integer> {
      * @param value
      *            The object to register.
      */
-    static void register(final Object value) {
-        synchronized (HashCodeBuilder.class) {
-            if (getRegistry() == null) {
-                REGISTRY.set(new HashSet<IDKey>());
-            }
+    private static void register(final Object value) {
+        Set<IDKey> registry = getRegistry();
+        if (registry == null) {
+            registry = new HashSet<IDKey>();
+            REGISTRY.set(registry);
         }
-        getRegistry().add(new IDKey(value));
+        registry.add(new IDKey(value));
     }
 
     /**
@@ -518,16 +518,12 @@ public class HashCodeBuilder implements Builder<Integer> {
      *            The object to unregister.
      * @since 2.3
      */
-    static void unregister(final Object value) {
+    private static void unregister(final Object value) {
         Set<IDKey> registry = getRegistry();
         if (registry != null) {
             registry.remove(new IDKey(value));
-            synchronized (HashCodeBuilder.class) {
-                //read again
-                registry = getRegistry();
-                if (registry != null && registry.isEmpty()) {
-                    REGISTRY.remove();
-                }
+            if (registry.isEmpty()) {
+                REGISTRY.remove();
             }
         }
     }

Reply via email to