All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.macrocloud.kernel.toolkit.utils.ThreadLocalUtil Maven / Gradle / Ivy

There is a newer version: 1.1.0-RELEASE
Show newest version
package org.macrocloud.kernel.toolkit.utils;

import org.springframework.lang.Nullable;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Supplier;


/**
 * ThreadLocal 工具类,通过在ThreadLocal存储map信息,来实现在ThreadLocal中维护多个信息
 * 
e.g. * ThreadLocalUtils.put("key",value);
* ThreadLocalUtils.get("key");
* ThreadLocalUtils.remove("key");
* ThreadLocalUtils.getAndRemove("key");
* ThreadLocalUtils.get("key",()->defaultValue);
* ThreadLocalUtils.clear();
*
* * @author zhouhao * @since 2.0 */ @SuppressWarnings("unchecked") public class ThreadLocalUtil { /** The Constant LOCAL. */ private static final ThreadLocal> LOCAL = ThreadLocal.withInitial(HashMap::new); /** * Gets the all. * * @return threadLocal中的全部值 */ public static Map getAll() { return new HashMap<>(LOCAL.get()); } /** * 设置一个值到ThreadLocal. * * @param 值的类型 * @param key 键 * @param value 值 * @return void * @see Map#put(Object, Object) */ public static T put(String key, T value) { LOCAL.get().put(key, value); return value; } /** * 设置一个值到ThreadLocal. * * @param map map * @see Map#putAll(Map) */ public static void put(Map map) { LOCAL.get().putAll(map); } /** * 删除参数对应的值. * * @param key the key * @see Map#remove(Object) */ public static void remove(String key) { LOCAL.get().remove(key); } /** * 清空ThreadLocal. * * @see Map#clear() */ public static void clear() { LOCAL.remove(); } /** * 从ThreadLocal中获取值. * * @param 值泛型 * @param key 键 * @return T 值, 不存在则返回null, 如果类型与泛型不一致, 可能抛出{@link ClassCastException} * @see Map#get(Object) * @see ClassCastException */ @Nullable public static T get(String key) { return ((T) LOCAL.get().get(key)); } /** * 从ThreadLocal中获取值,并指定一个当值不存在的提供者. * * @param the generic type * @param key the key * @param supplierOnNull the supplier on null * @return T the if absent * @see Supplier */ @Nullable public static T getIfAbsent(String key, Supplier supplierOnNull) { return ((T) LOCAL.get().computeIfAbsent(key, k -> supplierOnNull.get())); } /** * 获取一个值后然后删除掉. * * @param 值类型 * @param key 键 * @return T */ public static T getAndRemove(String key) { try { return get(key); } finally { remove(key); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy