ThreadLocal应用场景

ThreadLocal 提供了一种线程级别的数据存储机制。每个线程都拥有自己独立的 ThreadLocal 副本,这意味着每个线程都可以独立地、安全地操作这些变量,而不会影响其他线程。

主要就是俩作用:
1、解决并发问题,并发下造成的数据安全问题。
2、在线程中传递数据,在同一个线程执行过程中,ThreadLocal 的数据一直在,所以我们可以在前面把数据放到ThreadLocal 中,然后再后面的时候再取出来用,就可以避免要把这些数据一直通过参数传递,就是两个字,方便

ThreadLocal 其实在工作中应该是非常常见的,以下是一些比较典型的使用场景:

用户身份信息存储:在很多应用中,都需要做登录鉴权,一旦鉴权通过之后,就可以把用户信息存储在ThreadLocal 中,这样在后续的所有流程中,需要获取用户信息的,直接取 ThreadLocal 中获取就行了。非常的方便。

线程安全:ThreadLocal 可以用来定义一些需要并发安全处理的成员变量,比如 SimpleDateFormat,由于SimpleDateFormat 不是线程安全的,可以使用 ThreadLocal 为每个线程创建一个独立的 SimpleDateFormat实例从而避免线程安全问题。

日志上下文存储:在 Log 4j 等日志框架中,经常使用 ThreadLocal 来存储与当前线程相关的日志上下文。这允许开发者在日志消息中包含特定于线程的信息,如用户 ID 或事务 ID,这对于调试和监控是非常有用的。

数据库 Session:很多 ORM 框架,如 Hibernate、Mybatis,都是使用 ThreadLocal 来存储和管理数据库会话。这样可以确保每个线程都有自己的会话实例,避免了在多线程环境中出现的线程安全问题。

PageHelper 分页:PageHelper 是 MyBatis 中提供的分页插件,主要是用来做物理分页的。我们在代码中设置的分页参数信息,页码和页大小等信息都会存储在 ThreadLocal 中,方便在执行分页时读取这些数据。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值