Java——什么是ThreadLocal

2019-07-09  本文已影响0人  含泪若笑

Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。

所以ThreadLocal的应用场合,最适合的是按线程多实例(每个线程对应一个实例)的对象的访问,并且这个对象很多地方都要用到。

秘密就就在于上述叙述的ThreadLocalMap这个类。ThreadLocalMap是ThreadLocal类的一个静态内部类,它实现了键值对的设置和获取(对比Map对象来理解),每个线程中都有一个独立的ThreadLocalMap副本,它所存储的值,只能被当前线程读取和修改。ThreadLocal类通过操作每一个线程特有的ThreadLocalMap副本,从而实现了变量访问在不同线程中的隔离。因为每个线程的变量都是自己特有的,完全不会有并发错误。还有一点就是,ThreadLocalMap存储的键值对中的键是this对象指向的ThreadLocal对象,而值就是你所设置的对象了。

我参考的文章,可以细读的:

https://vence.github.io/2016/05/28/threadlocal-info/

https://blog.csdn.net/lufeng20/article/details/24314381

上一篇下一篇

猜你喜欢

热点阅读