欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

【多线程】ThreadLocal

程序员文章站 2022-03-22 09:45:33
文章目录两种典型应用场景场景1独享对象代码迭代gitThreadLocal:解决加锁性能问题什么是ConcurrentHashMap?ThreadLocalThreadLocal作用主要方法方法ThreadLocal原理及源码注意问题内存泄漏解决:内存泄漏(阿里规约,调用的最后remove())空指针异常解决: 注意强引用 弱引用两种典型应用场景场景1独享对象代码迭代git但通过加锁解决共享对象性能问题:还存在sycnized同一时间只能处理一个的,排队问题ThreadLocal:解决加锁...

两种典型应用场景

【多线程】ThreadLocal

场景1独享对象

【多线程】ThreadLocal

代码迭代git

但通过加锁解决共享对象
性能问题:还存在sycnized同一时间只能处理一个的,排队问题
【多线程】ThreadLocal

ThreadLocal:解决加锁性能问题

【多线程】ThreadLocal
改写dataformat来源
代码迭代2->5
生产出线程安全(时间不会重复)的日期(不用new 1000个对象,不用因为加锁 排队等待)
【多线程】ThreadLocal
拓展
buider

什么是ConcurrentHashMap?

ConcurrentHashMap 是Java集合中map的实现,是HashMap的线程安全版本,性能也比较好。ConcurrentHashMap在数据结构上和HashMap的数据结构是一致的,区别在于ConcurrentHashMap是线程安全的,而HashMap不是线程安全的。在需要用到HashMap且是多线程的情况下,推荐使用ConcurrentHashMap。

【多线程】ThreadLocal## 场景2 解决:用户信息需要被线程内所有方法共享

ThreadLocal

定义全局存储行不行?有性能损耗userMap
不用初始化,直接set/get
【多线程】ThreadLocal更好的解决办法ThreadLocal
【多线程】ThreadLocal

ThreadLocal作用

【多线程】ThreadLocal

主要方法

【多线程】ThreadLocal

方法

initValue 延迟加载
【多线程】ThreadLocal
【多线程】ThreadLocal

ThreadLocal原理及源码

【多线程】ThreadLocal

【多线程】ThreadLocal

【多线程】ThreadLocal
remove 删除map中对应的一个 this
【多线程】ThreadLocal
map 类似hashmap但是解决hash冲突的时候不同(线性探测发,找下一个空位置)
【多线程】ThreadLocal

注意问题

内存泄漏

【多线程】ThreadLocal
【多线程】ThreadLocal
【多线程】ThreadLocal

制为null,在threadlocal->resize
【多线程】ThreadLocal

解决:内存泄漏(阿里规约,调用的最后remove())

针对线程进行回收
【多线程】ThreadLocal

空指针异常

直接get,k默认为null。注意装箱拆箱
【多线程】ThreadLocal

解决: 注意强引用 弱引用

强引用
我们平日里面的用到的new了一个对象就是强引用,例如 Object obj = new Object();当JVM的内存空间不足时,宁愿抛出OutOfMemoryError使得程序异常终止也不愿意回收具有强引用的存活着的对象。
弱引用
弱引用是通过WeakReference类实现的,在GC的时候,不管内存空间足不足都会回收这个对象,适用于内存敏感的缓存,ThreadLocal中的key就用到了弱引用,有利于内存回收。

本文地址:https://blog.csdn.net/weixin_43469680/article/details/110946700

相关标签: 多线程