ThreadLocal

ThreadLocal其实就是一个并发线程,假如在并发情况下使用同一个静态变量的情况下可以使用threadLocal

threadLocal可以单独为每一个线程创建一个只属于当前线程的变量,这样可以保证并发情况下不会同时操作到该变量,因为每一个线程使用的都是线程内单独的变量,当然,如果是共享变量的话,是不可以这么使用的,该情况只适用于一些数据库连接(template/redis/mongo等)啦,或者是一些不需要共享的变量,或者是一些具有独立属性(比如session)等场景

threadLocal的四种实现

get    set    remove    initialValue

get

取到当前线程,通过当前线程获取一个map, 如果map不为空就通过传进来的key获取这个map中的value,注意,此处如果map中没有这个key的话,会报空指针!! 我们看源码有一个setInitialValue方法,点进去会看到一个initialValue方法

可以看到initialValue返回的是一个空

进行创建new ThreadLocalMap的时候, 就会报空指针异常,所以在进行get操作的时候,要先进行set,当然,也可以不进行set,这个时候就需要重写initialValue方法来写入一个value值进去, 这样在get方法中的initialValue时就会返回提前重写进去的值

set

set方法和get异曲同工,不同的是在map是空的情况下,value值是传递进去的

remove

如果map不为空,就remove

initialValue

和get中的initialValue相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值