From 5393109ee7bda9c8a820990028692a9f2ab8c418 Mon Sep 17 00:00:00 2001 From: John Zhao Date: Tue, 15 Mar 2016 15:03:54 -0700 Subject: [PATCH] KYLIN-1497 make three .getInstance thread safe --- .../main/java/org/apache/kylin/dict/DictionaryManager.java | 10 ++++++---- .../java/org/apache/kylin/dict/lookup/SnapshotManager.java | 10 ++++++---- .../src/main/java/org/apache/kylin/job/dao/ExecutableDao.java | 11 ++++++----- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryManager.java b/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryManager.java index ce04b55..b7c95da 100644 --- a/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryManager.java +++ b/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryManager.java @@ -62,10 +62,12 @@ public class DictionaryManager { public static DictionaryManager getInstance(KylinConfig config) { DictionaryManager r = CACHE.get(config); if (r == null) { - r = new DictionaryManager(config); - CACHE.put(config, r); - if (CACHE.size() > 1) { - logger.warn("More than one singleton exist"); + synchronized (DictionaryManager.class) { + r = CACHE.get(config); + if (r == null) { + r = new DictionaryManager(config); + CACHE.put(config, r); + } } } return r; diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/lookup/SnapshotManager.java b/core-dictionary/src/main/java/org/apache/kylin/dict/lookup/SnapshotManager.java index 53bf60d..9562b8d 100644 --- a/core-dictionary/src/main/java/org/apache/kylin/dict/lookup/SnapshotManager.java +++ b/core-dictionary/src/main/java/org/apache/kylin/dict/lookup/SnapshotManager.java @@ -44,10 +44,12 @@ public class SnapshotManager { public static SnapshotManager getInstance(KylinConfig config) { SnapshotManager r = SERVICE_CACHE.get(config); if (r == null) { - r = new SnapshotManager(config); - SERVICE_CACHE.put(config, r); - if (SERVICE_CACHE.size() > 1) { - logger.warn("More than one singleton exist"); + synchronized (SnapshotManager.class) { + r = SERVICE_CACHE.get(config); + if (r == null) { + r = new SnapshotManager(config); + SERVICE_CACHE.put(config, r); + } } } return r; diff --git a/core-job/src/main/java/org/apache/kylin/job/dao/ExecutableDao.java b/core-job/src/main/java/org/apache/kylin/job/dao/ExecutableDao.java index 1869ca7..d063ee7 100644 --- a/core-job/src/main/java/org/apache/kylin/job/dao/ExecutableDao.java +++ b/core-job/src/main/java/org/apache/kylin/job/dao/ExecutableDao.java @@ -49,12 +49,13 @@ public class ExecutableDao { public static ExecutableDao getInstance(KylinConfig config) { ExecutableDao r = CACHE.get(config); if (r == null) { - r = new ExecutableDao(config); - CACHE.put(config, r); - if (CACHE.size() > 1) { - logger.warn("More than one singleton exist"); + synchronized (ExecutableDao.class) { + r = CACHE.get(config); + if (r == null) { + r = new ExecutableDao(config); + CACHE.put(config, r); + } } - } return r; } -- 2.5.4 (Apple Git-61)