定义
从名字上来看,ThreadLocal其实就是给每个线程保存变量用的,每个线程这个变量只有一份。
场景
- 线程间的数据隔离
- 变量不是线程安全的,又不想使用加锁的方式来 降低效率,比如SimpleDateFormat
- 数据在不同的层级之间透传,比如从controller,传到service,传到dao层
- 管理连接资源,比如在spring中,事务的实现,一个事务中用的connection都是同一个
示例代码
上下文
public class ContextInfo {
public static ThreadLocal<ContextInfo> threadLocal = new ThreadLocal<>();
public static ContextInfo getInstance() {
ContextInfo contextInfo = threadLocal.get();
if (contextInfo == null) {
contextInfo = new ContextInfo();
threadLocal.set(contextInfo);
}
return contextInfo;
}
}