/*
* Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0,
* and the EPL 1.0 (http://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 <T> the type
*/
public class DebuggingThreadLocal<T> {
private final ConcurrentHashMap<Long, T> map = new ConcurrentHashMap<Long, T>();
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<Long, T> getSnapshotOfAllThreads() {
return new HashMap<Long, T>(map);
}
}