/** * Collects states maintained in {@link ThreadLocal}, if any. */ synchronized void collectThreadLocalStates() { final ConcurrentMap<String, ThreadSafeSampleStat> localStats = threadLocalMetricsMap.get(); if (localStats != null) { aggregateLocalStatesToGlobalMetrics(localStats); } }
@Override public synchronized void snapshot(MetricsRecordBuilder rb, boolean all) { Iterator<WeakReference<ConcurrentMap<String, ThreadSafeSampleStat>>> iter = weakReferenceQueue.iterator(); while (iter.hasNext()) { ConcurrentMap<String, ThreadSafeSampleStat> map = iter.next().get(); if (map == null) { // Thread has died; clean up its state iter.remove(); } else { aggregateLocalStatesToGlobalMetrics(map); } } for (MutableRate globalMetric : globalMetrics.values()) { globalMetric.snapshot(rb, all); } }