org.h2.util.DebuggingThreadLocal Maven / Gradle / Ivy
/*
* Copyright 2004-2019 H2 Group. Multiple-Licensed under the MPL 2.0,
* and the EPL 1.0 (https://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.util;
import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
/**
* Similar to ThreadLocal, except that it allows its data to be read from other
* threads - useful for debugging info.
*
* @param the type
*/
public class DebuggingThreadLocal {
private final ConcurrentHashMap map = new ConcurrentHashMap<>();
public void set(T value) {
map.put(Thread.currentThread().getId(), value);
}
/**
* Remove the value for the current thread.
*/
public void remove() {
map.remove(Thread.currentThread().getId());
}
public T get() {
return map.get(Thread.currentThread().getId());
}
/**
* Get a snapshot of the data of all threads.
*
* @return a HashMap containing a mapping from thread-id to value
*/
public HashMap getSnapshotOfAllThreads() {
return new HashMap<>(map);
}
}