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(); } } }