
ThreadLocal系列
ThreadLocal系列
YYAugenstern
大佬都是日积月累的勤学苦练造就的!在通往大佬的路上欢迎各位朋友 点赞 + 关注 + 评论 + 转发 + 收藏!让我们每天进步一点点,用代码改变世界,改变自己和家人的生活,为推动信息化社会进步贡献一份自己的绵薄之力!路漫漫其修远兮,唯有脚踏实地,勇往之前才能到达心中的彼岸。加油,每天进步一点点,终有一天你会成为你想成为的人。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
系列十、ThreadLocal的使用场景
(1)使用日期工具类,当用到SimpleDateFormat时,使用ThreadLocal保证线程安全;(2)全局存储用户信息(用户信息存入ThreadLocal,那么当前线程在任何地方需要时,都可以使用);(3)保证同一个线程,获取的数据库连接Connection是同一个,使用ThreadLocal来解决线程安全问题;原创 2023-11-22 15:37:03 · 417 阅读 · 0 评论 -
系列九、Entry的key为什么要设计成弱引用
既然key设计为强引用和弱引用都有可能出现内存泄漏的问题,那么为什么要设计为强引用呢?原创 2023-11-22 15:18:44 · 1004 阅读 · 0 评论 -
系列八、key是弱引用,gc垃圾回收时会影响ThreadLocal正常工作吗
到这里,有些小伙伴可能有疑问,的key既然是那么GC时会不会贸然地把key回收掉,进而影响的正常使用呢?答案是不会影响ThreadLocal的正常工作的。原创 2023-11-22 14:42:32 · 1276 阅读 · 0 评论 -
系列七、ThreadLocal为什么会导致内存泄漏
ThreadLocalMap是ThreadLocal的内部类,没有实现Map接口,用独立的方式实现了Map的功能,其内部的Entry也是独立实现的。原创 2023-11-22 14:21:04 · 1252 阅读 · 0 评论 -
系列六、ThreadLocal内存泄漏案例
【代码】系列六、ThreadLocal内存泄露案例。原创 2023-11-22 12:36:04 · 596 阅读 · 0 评论 -
系列五、为什么不用线程id作为ThreadLocalMap的key
如上案例所示,当一个资源类中有2个或者多个共享变量,即有多个ThreadLocal时,如果使用线程id作为ThreadLocalMap的key,由于id是唯一的,往map里面put值时,相同的id,后边的值会把前边的值覆盖掉,即作者会把书名覆盖掉,那么我们再从ThreadLocalMap中取值的时候就取不到书名信息了,因此使用线程id作为ThreadLocalMap的key是不合适的。原创 2023-11-22 10:34:09 · 571 阅读 · 0 评论 -
系列四、ThreadLocal的工作原理
(3)并发多线程环境下,每个线程在往ThreadLocal里面设值的时候,其实都是在往自己的ThreadLocalMap中设值,读是以某个ThreadLocal为引用,在自己的map里面找到对应的value,从而实现线程隔离;(2)ThreadLocalMap内部维护着Entry数组,每个Entry代表一个完整的对象,key是ThreadLocal本身,value是ThreadLocal的泛型值;原创 2023-11-22 10:18:26 · 411 阅读 · 0 评论 -
系列三、ThreadLocal vs synchronized
虽然ThreadLocal与synchronized关键字都能用于处理多线程并发访问变量的问题,但是两者处理问题的角度和思路是不一样的。都实现了线程隔离,但是使用ThreadLocal更为合适,因为这样可以使程序拥有更高的并发性。原创 2023-11-22 09:18:24 · 405 阅读 · 0 评论 -
系列二、为什么要使用ThreadLocal?
并发场景下,会存在多个线程同时修改一个共享变量的场景,这就有可能会出现线程安全的问题。为了解决线程安全问题,可以用加锁的方式,比如对核心代码使用synchronized或者Lock进行加锁,从而起到线程隔离的效果。但是加锁的方式,在高并发下会导致系统变慢,加锁示意图如下:还有另外一种方案,就是使用空间换时间的方式,即:使用ThreadLocal,使用ThreadLocal访问共享变量时,会在每个线程本地保存一份共享变量的副本。多线程对共享变量修改时,实际上每个线程操作的是自己的变量副本,从而保证线程安全。原创 2023-11-22 09:12:47 · 614 阅读 · 0 评论 -
系列一、介绍
官网:ThreadLocal用于提供线程内的局部变量,不同线程之间不会互相干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量传递的复杂度。大白话:线程并发:ThreadLocal用于在多线程并发的场景下;传递数据:我们可以通过ThreadLocal在同一线程,不同组件中传递公共变量数据;线程隔离:每个线程的变量都是独立的,不会互相影响;原创 2023-11-21 12:12:19 · 141 阅读 · 0 评论