采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,是不是一个ThreadLocal里面只能存一个 long类型的值啊,我看源码 好像多次set 会执行覆盖~~ 但是一个线程可以有多个threadLocal
你好,先来看一下threadlocal的内部结构图吧从上面的结构图,我们已经窥见ThreadLocal的核心机制: • 每个Thread线程内部都有一个Map。 • Map里面存储线程本地对象(key)和线程的变量副本(value) • 但是,Thread内部的Map是由ThreadLocal维护的,由ThreadLocal负责向map获取和设置线程的变量值。所以对于不同的线程,每次获取副本值时,别的线程并不能获取到当前线程的副本值,于是就形成了副本的隔离,互不干扰。ThreadLocalMap是ThreadLocal的内部类,没有实现Map接口,用独立的方式实现了Map的功能,Map内部的节点对象Entry也独立实现。每个ThreadLocal只能保存一个变量副本,如果想要上线一个线程能够保存多个副本以上,就需要创建多个ThreadLocal。threadlocal里存储的可以是long,也可以是其他对象,同一个线程里不断set会不断覆盖。不同线程间数据互不影响。
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
1.7k 1
1.1k 18
1.2k 15
3.6k 12
1.2k 12