From 58dac5b4d5865a480ebda963580fe9080e1e4564 Mon Sep 17 00:00:00 2001 From: mystarry-sky Date: Thu, 11 Jan 2024 10:54:12 +0800 Subject: [PATCH] =?UTF-8?q?chameleon=E4=B8=8E=E6=A0=A1=E9=AA=8C=E5=8D=8F?= =?UTF-8?q?=E5=90=8C-=E5=B9=B6=E5=8F=91=E5=9C=BA=E6=99=AF=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=A7=A3=E6=9E=90=E7=BB=93=E6=9E=9C=E7=BC=93=E5=AD=98?= =?UTF-8?q?Map=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datachecker/common/util/MapUtils.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/datachecker-common/src/main/java/org/opengauss/datachecker/common/util/MapUtils.java b/datachecker-common/src/main/java/org/opengauss/datachecker/common/util/MapUtils.java index e2ba5d9..231f54e 100644 --- a/datachecker-common/src/main/java/org/opengauss/datachecker/common/util/MapUtils.java +++ b/datachecker-common/src/main/java/org/opengauss/datachecker/common/util/MapUtils.java @@ -40,8 +40,12 @@ public class MapUtils { */ public static void put(Map> map, K key, T vObject) { map.compute(key, (k, value) -> { - if (value == null) { - value = new LinkedList<>(); + if (value == null) { // 第一次判断,提高效率 + synchronized (MapUtils.class) { // 进入同步块,确保只有一个线程能获取到锁 + if (value == null) { // 再次判断,在多线程情况下避免不必要的初始化操作 + value = new LinkedList<>(); + } + } } value.add(vObject); return value; @@ -80,8 +84,12 @@ public class MapUtils { */ public static void put(Map> map, K key, S vKey, T vValue) { map.compute(key, (valueKey, vMap) -> { - if (vMap == null) { - vMap = new HashMap<>(); + if (vMap == null) { // 第一次判断,提高效率 + synchronized (MapUtils.class) { // 进入同步块,确保只有一个线程能获取到锁 + if (vMap == null) { // 再次判断,在多线程情况下避免不必要的初始化操作 + vMap = new HashMap<>(); + } + } } vMap.put(vKey, vValue); return vMap; @@ -101,7 +109,8 @@ public class MapUtils { */ public static T get(Map> map, K key, S vKey) { if (map.containsKey(key)) { - return map.get(key).get(vKey); + return map.get(key) + .get(vKey); } else { return null; } -- Gitee