【面试普通人VS高手系列】ThreadLocal是什么?它的实现原理呢?

一个工作了4年的小伙伴,又私信了我一个并发编程里面的问题。

他说他要抓狂了,每天CRUD,也没用到过ThreadLocal啊,怎么就不能问我怎么写CRUD呢?

我反问他,如果只问你项目和业务,那有些4年的小伙伴他要求月薪30K,有些只要求月薪15K,

那请问,凭什么每个月要多出15k给你?我花30k招两个15k的,不能写CRUD吗?

好吧,我们来看看ThreadLocal这个问题,普通人和高手的回答。

部分高手面试文档已整理,需要的小伙伴可以扫描添加下方二维码

普通人:

嗯...............

高手:

好的,这个问题我从三个方面来回答。

  1. ThreadLocal是一种线程隔离机制,它提供了多线程环境下对于共享变量访问的安全性。

  2. 在多线程访问共享变量的场景中,一般的解决办法是对共享变量加锁,从而保证在同一时刻只有一个线程能够对共享变量进行更新,并且基于Happens-Before规则里面的监视器锁规则,又保证了数据修改后对其他线程的可见性。

  3. 但是加锁会带来性能的下降,所以ThreadLocal用了一种空间换时间的设计思想,也就是说在每个线程里面,都有一个容器来存储共享变量的副本,然后每个线程只对自己的变量副本来做更新操作,这样既解决了线程安全问题,又避免了多线程竞争加锁的开销。

  4. ThreadLocal的具体实现原理是,在Thread类里面有一个成员变量ThreadLocalMap,它专门来存储当前线程的共享变量副本,后续这个线程对于共享变量的操作,都是从这个ThreadLocalMap里面进行变更,不会影响全局共享变量的值。

以上就是我对这个问题的理解。

总结

ThreadLocal使用场景比较多,比如在数据库连接的隔离、对于客户端请求会话的隔离等等。

在ThreadLocal中,除了空间换时间的设计思想以外,还有一些比较好的设计思想,比如线性探索解决hash冲突,数据预清理机制、弱引用key设计尽可能避免内存泄漏等。

这些思想在解决某些类似的业务问题时,都是可以直接借鉴的。

好的,本期的普通人VS高手面试系列就到这里结束了,喜欢的朋友记得点赞和收藏。

另外,这些面试题我都整理成了笔记,大家有需要的可以私信获取。

 部分高手面试文档已整理,需要的小伙伴可以扫描添加下方二维码

↓↓↓↓↓↓↓↓

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跟着Mic学架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值