ThreadLocal的应用
时间: 2023-10-28 14:00:51 浏览: 82
ThreadLocal
ThreadLocal的应用有很多场景。首先,ThreadLocal可以用于跨方法进行参数传递。在Web容器中,每个完整的请求周期由一个线程来处理,通过将数据放入ThreadLocal中,当前线程执行时只需要从ThreadLocal获取数据即可,比如在Spring的IOC和AOP中,将数据库连接放入ThreadLocal中可以解决事务问题。类似地,在微服务领域的链路跟踪中,通过ThreadLocal传递traceId信息也是一种应用场景。
另外,ThreadLocal还可以用于在系统设计中保存用户信息。在实际的系统设计中,我们可以通过拦截器等方式获取到用户信息,并将其存入ThreadLocal,这样在当前线程的任何地方都可以通过ThreadLocal的get方法获取到用户信息。这种方式比直接在方法之间传递参数更加方便和可靠。
值得注意的是,每个Thread维护一个ThreadLocalMap,其中ThreadLocal实例本身作为key,真正需要存储的对象作为value。ThreadLocal本身并不存储值,它只是作为一个key来获取对应的value。需要特别注意的是,ThreadLocal使用了弱引用作为key,在GC时可能会被回收。
阅读全文