From b2c1afce7eb13ea44fc7d25562cc3bb83cc91b2f Mon Sep 17 00:00:00 2001 From: Philippe Marschall Date: Mon, 16 May 2016 10:30:02 +0200 Subject: [PATCH] LANG-1230: Remove unnecessary synchronization from registry lookup in EqualsBuilder and HashCodeBuilder (closes #143) --- .../commons/lang3/builder/EqualsBuilder.java | 22 +++++++------------ .../lang3/builder/HashCodeBuilder.java | 22 ++++++++----------- 2 files changed, 17 insertions(+), 27 deletions(-) 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 b6c59de13..6a1b5df7a 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 @@ static boolean isRegistered(final Object lhs, final Object rhs) { * @param lhs this 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>()); - } + private static void register(final Object lhs, final Object rhs) { + Set> registry = getRegistry(); + if (registry == null) { + registry = new HashSet>(); + REGISTRY.set(registry); } - - final Set> registry = getRegistry(); final Pair pair = getRegisterPair(lhs, rhs); registry.add(pair); } @@ -195,17 +193,13 @@ static void register(final Object lhs, final Object rhs) { * @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> registry = getRegistry(); if (registry != null) { final Pair 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(); } } } 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 98ed5c5b6..beab5fc51 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 static int reflectionHashCode(final Object object, final String... exclud * @param value * The object to register. */ - static void register(final Object value) { - synchronized (HashCodeBuilder.class) { - if (getRegistry() == null) { - REGISTRY.set(new HashSet()); - } + private static void register(final Object value) { + Set registry = getRegistry(); + if (registry == null) { + registry = new HashSet(); + REGISTRY.set(registry); } - getRegistry().add(new IDKey(value)); + registry.add(new IDKey(value)); } /** @@ -518,16 +518,12 @@ static void register(final Object value) { * The object to unregister. * @since 2.3 */ - static void unregister(final Object value) { + private static void unregister(final Object value) { Set 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(); } } }