From e6479930a33f705644aea7d65cebeda947720c25 Mon Sep 17 00:00:00 2001 From: nordligulv Date: Tue, 26 Mar 2013 01:46:24 +0400 Subject: [PATCH] use a ConcurrentHashMap in logger factory --- .../org/slf4j/impl/AndroidLoggerFactory.java | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/slf4j-android/src/main/java/org/slf4j/impl/AndroidLoggerFactory.java b/slf4j-android/src/main/java/org/slf4j/impl/AndroidLoggerFactory.java index 7c7587c6..c77155a9 100755 --- a/slf4j-android/src/main/java/org/slf4j/impl/AndroidLoggerFactory.java +++ b/slf4j-android/src/main/java/org/slf4j/impl/AndroidLoggerFactory.java @@ -28,9 +28,9 @@ import android.util.Log; import org.slf4j.ILoggerFactory; import org.slf4j.Logger; -import java.util.HashMap; -import java.util.Map; import java.util.StringTokenizer; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; /** * AndroidLoggerFactory is an implementation of {@link ILoggerFactory} returning @@ -39,14 +39,14 @@ import java.util.StringTokenizer; * @author Andrey Korzhevskiy */ public class AndroidLoggerFactory implements ILoggerFactory { - private final Map loggerMap; + private final ConcurrentMap loggerMap; static final int TAG_MAX_LENGTH = 23; // tag names cannot be longer on Android platform // see also android/system/core/include/cutils/property.h // and android/frameworks/base/core/jni/android_util_Log.cpp public AndroidLoggerFactory() { - loggerMap = new HashMap(); + loggerMap = new ConcurrentHashMap(); } /* @@ -62,16 +62,14 @@ public class AndroidLoggerFactory implements ILoggerFactory { "Logger name '" + passedName + "' exceeds maximum length of " + TAG_MAX_LENGTH + " characters, using '" + name + "' instead."); } - Logger ulogger; - // protect against concurrent access of loggerMap - synchronized (this) { - ulogger = loggerMap.get(name); - if (ulogger == null) { - ulogger = new AndroidLoggerAdapter(name); - loggerMap.put(name, ulogger); - } + + Logger logger = loggerMap.get(name); + if (logger == null) { + Logger newInstance = new AndroidLoggerAdapter(name); + Logger oldInstance = loggerMap.putIfAbsent(name, newInstance); + logger = oldInstance == null ? newInstance : oldInstance; } - return ulogger; + return logger; } /**