记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

深度解析ThreadLocal原理

2020-11-11 17:17
今天呢,和大家聊一下。
1. 是什么?
提供的的一个线程绑定变量的类。
他的思想就是:给每一个使用到这个资源的线程都克隆一份,实现了不同线程使用不同的资源,且该资源之间相互独立
2. 为什么用?
思考一个场景:数据库连接的时候,我们会创建一个连接,让不同的线程使用。这个时候就会出现多个线程争抢同一个资源的情况。
这种多个线程争抢同一个资源的情况,很常见,我们常用的解决办法也就两种:空间换时间,时间换空间
没有办法,鱼与熊掌不可兼得也。就如我们的理论,也是牺牲其中一项,保证其他两项。
而针对上面的场景我们的解决办法如下:

通过为每一个线程绑定一个指定类型的变量,相当于线程私有化
3. 怎么用?
ThreadLocal<Integer> threadLocal = new ThreadLocal<>();
threadLocal.get();
threadLocal.set(1);
threadLocal.remove();

没错,这四行代码已经把的使用方法表现得明明白白。

记住在使用的以后,一定要remove,一定要remove,一定要remove
为什么要。相信不少小伙伴听到过会导致内存泄漏问题。
没错,所以为了解决这种情况,所以你懂吧,用完就移除,别浪费空间(渣男欣慰)
看到这,脑袋上有好多问号出现了(小朋友你是否有很多问号?)
为啥会引发内存泄漏?
为啥不remove就内存泄漏了
它是怎么讲对象和线程绑定的
为啥get的时候拿到的就是当前线程的而不是其他线程的
它怎么实现的???
来吧,开淦,源码来
4. 源码解读
先来说一个思路:如果我们自己写一个会咋写?
线程绑定一个对象。**这难道不是我们熟知的映射?**有了我们就可以以线程为,对象为添加到一个集合中,然后各种操作,想怎么玩就怎么玩,搞定。
知识来源: www.infoq.cn/article/eb09a8ddb6df4edf1505fa81c

阅读:120957 | 评论:0 | 标签:无

想收藏或者和大家分享这篇好文章→复制链接地址

“深度解析ThreadLocal原理”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

永久免费持续更新精选优质黑客技术文章Hackdig,帮你成为掌握黑客技术的英雄

求投资、赞助、支持💖

标签云