请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,是不是一个ThreadLocal里面只能存一个 long类型的值啊

老师,是不是一个ThreadLocal里面只能存一个 long类型的值啊,我看源码 好像多次set 会执行覆盖~~ 但是一个线程可以有多个threadLocal

正在回答

1回答

Jimin 2018-06-15 23:11:16

你好,先来看一下threadlocal的内部结构图吧
https://img1.sycdn.imooc.com//szimg/5b23d712000111ef15001493.jpg

从上面的结构图,我们已经窥见ThreadLocal的核心机制:
• 每个Thread线程内部都有一个Map。
• Map里面存储线程本地对象(key)和线程的变量副本(value)
• 但是,Thread内部的Map是由ThreadLocal维护的,由ThreadLocal负责向map获取和设置线程的变量值。
所以对于不同的线程,每次获取副本值时,别的线程并不能获取到当前线程的副本值,于是就形成了副本的隔离,互不干扰。

ThreadLocalMap是ThreadLocal的内部类,没有实现Map接口,用独立的方式实现了Map的功能,Map内部的节点对象Entry也独立实现。

每个ThreadLocal只能保存一个变量副本,如果想要上线一个线程能够保存多个副本以上,就需要创建多个ThreadLocal。

threadlocal里存储的可以是long,也可以是其他对象,同一个线程里不断set会不断覆盖。不同线程间数据互不影响。

1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信