diff --git a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStat.java b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStat.java index 9b2ccab82a..ee2968860d 100644 --- a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStat.java +++ b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStat.java @@ -28,6 +28,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -500,20 +501,26 @@ public class WebAppStat { } public List> getSessionStatDataList() { - List> sessionStatDataList = new ArrayList>(this.sessionStatMap.size()); - for (WebSessionStat sessionStat : Collections.unmodifiableCollection(this.sessionStatMap.values())) { - Map sessionStatData = sessionStat.getStatData(); + Lock lock = sessionStatLock.readLock(); + lock.lock(); + try { + List> sessionStatDataList = new ArrayList>(this.sessionStatMap.size()); + for (WebSessionStat sessionStat : this.sessionStatMap.values()) { + Map sessionStatData = sessionStat.getStatData(); - int runningCount = ((Number) sessionStatData.get("RunningCount")).intValue(); - long requestCount = (Long) sessionStatData.get("RequestCount"); + int runningCount = ((Number) sessionStatData.get("RunningCount")).intValue(); + long requestCount = (Long) sessionStatData.get("RequestCount"); - if (runningCount == 0 && requestCount == 0) { - continue; + if (runningCount == 0 && requestCount == 0) { + continue; + } + + sessionStatDataList.add(sessionStatData); } - - sessionStatDataList.add(sessionStatData); + return sessionStatDataList; + } finally { + lock.unlock(); } - return sessionStatDataList; } public void computeUserAgent(String userAgent) {