From e9da158c9ec60de7da12cc1154d565fa4ec6b7a9 Mon Sep 17 00:00:00 2001 From: "hailang.zhang" Date: Fri, 28 Jul 2023 17:29:41 +0800 Subject: [PATCH] Use computeIfAbsent() replace putIfAbsent() --- .../cn/hippo4j/springboot/starter/core/ClientWorker.java | 9 +++------ .../cn/hippo4j/discovery/core/BaseInstanceRegistry.java | 9 ++++----- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/starters/threadpool/server/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java b/starters/threadpool/server/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java index a75a7f6a..67b2864e 100644 --- a/starters/threadpool/server/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java +++ b/starters/threadpool/server/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java @@ -276,9 +276,7 @@ public class ClientWorker implements DisposableBean { if (cacheData != null) { return cacheData; } - cacheData = new CacheData(namespace, itemId, threadPoolId); - CacheData lastCacheData = cacheMap.putIfAbsent(threadPoolId, cacheData); - if (lastCacheData == null) { + return cacheMap.computeIfAbsent(threadPoolId, k-> { String serverConfig; try { serverConfig = getServerConfig(namespace, itemId, threadPoolId, defaultTimedOut); @@ -287,9 +285,8 @@ public class ClientWorker implements DisposableBean { } catch (Exception ex) { log.error("Cache Data Error. Service Unavailable: {}", ex.getMessage()); } - lastCacheData = cacheData; - } - return lastCacheData; + return cacheData; + }); } private void setHealthServer(boolean isHealthServer) { diff --git a/threadpool/server/discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java b/threadpool/server/discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java index 3c05f901..920ac291 100644 --- a/threadpool/server/discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java +++ b/threadpool/server/discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java @@ -64,11 +64,10 @@ public class BaseInstanceRegistry implements InstanceRegistry { public void register(InstanceInfo registrant) { Map> registerMap = registry.get(registrant.getAppName()); if (registerMap == null) { - ConcurrentHashMap> registerNewMap = new ConcurrentHashMap<>(); - registerMap = registry.putIfAbsent(registrant.getAppName(), registerNewMap); - if (registerMap == null) { - registerMap = registerNewMap; - } + registerMap = registry.computeIfAbsent(registrant.getAppName(), k -> { + ConcurrentHashMap> registerNewMap = new ConcurrentHashMap<>(); + return registerNewMap; + }); } Lease existingLease = registerMap.get(registrant.getInstanceId()); if (existingLease != null && (existingLease.getHolder() != null)) {