老师,是不是一个ThreadLocal里面只能存一个 long类型的值啊
来源:5-

sam爱java
2018-06-15
老师,是不是一个ThreadLocal里面只能存一个 long类型的值啊,我看源码 好像多次set 会执行覆盖~~ 但是一个线程可以有多个threadLocal
写回答
1回答
-
你好,先来看一下threadlocal的内部结构图吧
从上面的结构图,我们已经窥见ThreadLocal的核心机制:
• 每个Thread线程内部都有一个Map。
• Map里面存储线程本地对象(key)和线程的变量副本(value)
• 但是,Thread内部的Map是由ThreadLocal维护的,由ThreadLocal负责向map获取和设置线程的变量值。
所以对于不同的线程,每次获取副本值时,别的线程并不能获取到当前线程的副本值,于是就形成了副本的隔离,互不干扰。
ThreadLocalMap是ThreadLocal的内部类,没有实现Map接口,用独立的方式实现了Map的功能,Map内部的节点对象Entry也独立实现。
每个ThreadLocal只能保存一个变量副本,如果想要上线一个线程能够保存多个副本以上,就需要创建多个ThreadLocal。
threadlocal里存储的可以是long,也可以是其他对象,同一个线程里不断set会不断覆盖。不同线程间数据互不影响。10
相似问题