ThreadLocal 适用于变量在线程间隔离,而在方法或类间共享的场景。现在在Springboot中我做如下场景的使用:
使用 Spring Boot 创建一个 Web 应用程序,使用 ThreadLocal 存放一个 Integer 的值,来暂且代表需要在线程中保存的用户信息,这个值初始是 null。在业务逻辑中,我先从 ThreadLocal 获取一次值,然后把外部传入的参数设置到 ThreadLocal 中,来模拟从当前上下文获取到用户信息的逻辑,随后再获取一次值,最后输出两次获得的值和线程名称。
@RestController
public class threadLocal {
private ThreadLocal<Integer> currentUser = ThreadLocal.withInitial(() -> null);
@RequestMapping("wrong")
public Map wrong(@RequestParam("userId") Integer userId) {
//设置用户信息之前先查询一次ThreadLocal中的用户信息
String before = Thread.currentThread().getName() + ":" + currentUser.get();
//设置用户信息到ThreadLocal
currentUser.set(userId);
//设置用户信息之后再查询一次ThreadLocal中的用户信息
String after = Thread.currentThread().getName() + ":" + currentUser.get();
//汇总输出两次查询
版权声明:本文为ljb622原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。