Java之ThreadLocal
2022-07-06 17:33:11 8 举报
AI智能生成
登录查看完整内容
Java之ThreadLocal
作者其他创作
大纲/内容
对象线程间隔离
每个线程独享一个对象
每个线程内需要保存全局变量(例如在拦截器获取用户信息),可以让不同方法直接使用,避免参数传递麻烦
使用场景
每个线程有一个自己的ThreadLocalMap
Thread类有一个类型为ThreadLocal.ThreadLocalMap的实例变量threadLocals
简单地将它的key视作ThreadLocal,value为代码中放入的值(实际上key并不是ThreadLocal本身,而是它的一个弱引用)
每个线程在往ThreadLocal里放值的时候,都会往自己的ThreadLocalMap里存,读也是以ThreadLocal作为引用,在自己的map里找对应的key,从而实现了线程隔离
注意Entry, 它的key是ThreadLocal<?> k ,继承自WeakReference, 也就是我们常说的弱引用类型
ThreadLocalMap中使用数组存储当前线程所有的ThreadLocal对象
ThreadLocalMap
数据结构
//获取当前线程 Thread t = Thread.currentThread();font color=\"#81c784\
ThreadLocalMap.set()
//获取当前线程Thread t = Thread.currentThread();font color=\"#81c784\
ThreadLocalMap.get()
关键方法
Hash 算法
探测式清理
启发式清理
过期 key 清理
扩容机制
Java之ThreadLocal
0 条评论
回复 删除
下一页