Skip to content

ThreadLocalUtils

java
@SuppressWarnings("unchecked")
public class ThreadLocalUtils {

    private ThreadLocalUtils() {
    }

    private static final ThreadLocal<Map<Object, Object>> MAP_THREAD_LOCAL = ThreadLocal.withInitial(HashMap::new);

    private static final Map<Object, Object> cacheMap;

    static {
        cacheMap = MAP_THREAD_LOCAL.get();
    }

    public static Map<Object, Object> getThreadLocal() {
        return MAP_THREAD_LOCAL.get();
    }

    public static <T> T get(Object key) {
        if (cacheMap == null) {
            return null;
        }
        return (T) cacheMap.get(key);
    }

    public static <T> T get(Object key, Object defaultValue) {
        if (cacheMap == null) {
            return (T) defaultValue;
        }
        return (T) cacheMap.get(key);
    }

    public static Object set(Object key, Object value) {
        return cacheMap.put(key, value);
    }

    public static void set(Map<Object, Object> map) {
        cacheMap.putAll(map);
    }

    public static void removeValue(Object key) {
        MAP_THREAD_LOCAL.remove();
        if (!Objects.isNull(cacheMap.get(key))) {
            cacheMap.remove(key);
        }
    }

}

Released under the MIT License.