From 0c8c763e431d3c923f3db04b9ecd32aef1b94450 Mon Sep 17 00:00:00 2001 From: Stuart Douglas Date: Tue, 3 Dec 2013 16:13:40 +0100 Subject: [PATCH] Use double checked locking to remove sync block --- .../jackson/databind/ser/SerializerCache.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/SerializerCache.java b/src/main/java/com/fasterxml/jackson/databind/ser/SerializerCache.java index 0d4b1f26e7..8f7cc5c72c 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ser/SerializerCache.java +++ b/src/main/java/com/fasterxml/jackson/databind/ser/SerializerCache.java @@ -33,7 +33,7 @@ public final class SerializerCache /** * Most recent read-only instance, created from _sharedMap, if any. */ - private ReadOnlyClassToSerializerMap _readOnlyMap = null; + private volatile ReadOnlyClassToSerializerMap _readOnlyMap = null; public SerializerCache() { } @@ -43,11 +43,13 @@ public SerializerCache() { } */ public ReadOnlyClassToSerializerMap getReadOnlyLookupMap() { - ReadOnlyClassToSerializerMap m; - synchronized (this) { - m = _readOnlyMap; - if (m == null) { - _readOnlyMap = m = ReadOnlyClassToSerializerMap.from(_sharedMap); + ReadOnlyClassToSerializerMap m = _readOnlyMap; + if(m == null) { + synchronized (this) { + m = _readOnlyMap; + if (m == null) { + _readOnlyMap = m = ReadOnlyClassToSerializerMap.from(_sharedMap); + } } } return m.instance();