一、旧的方式
ThreadLocal这个类的原理想必大家都不陌生,这里不再对其原理进行过多的阐述,本文从程序设计层面来讨论一下对它的合理使用。通常网上以及实际业务开发过程中对ThreadLocal的使用都会自己实现一个工具类来方便项目中其他开发人员来使用,而且这个工具类都是比较通用的。大致见以下代码:
/**
* <p>Description:
* <p>date: 2021/10/11
* <p>time: 15:13
*
* @author jiangbin
* @since 0.2
*/
public final class ThreadLocalUtil {
/**
* 初始化ThreadLocal为Map
*/
private static final ThreadLocal<Map<String, Object>> THREAD_LOCAL = ThreadLocal.withInitial(() -> new HashMap<>(16));
private ThreadLocalUtil() {
}
/**
* 获取ThreadLocal值
*/
public static Map<String, Object> getThreadLocal() {
return THREAD_LOCAL.get();
}
/**
* 根据key值获取ThreadLocal中Map的value
*/
public static <T> T get(String key) {
Map map = THREAD_LOCAL.get();
return (T)map.get(key);
}
/**
* 根据key值获取ThreadLocal中Map的value,如果value为空,返回defaultValue
*/
public static <T> T get(String key, T defaultValue) {
Map map = THREAD_LOC