是的,实例将是相同的,但是代码将您设置的值附加到Thread.currentThread()
, 当您设置和检索时,因此当使用方法set
和访问时,值集将仅在当前线程中可访问get
。
它真的很容易理解。
想象一下,每个Thread
都有一个将值与ThreadLocal
实例相关联的映射。每次对 a 执行 get 或 set 时ThreadLocal
, 的实现ThreadLocal
都会获取与当前Thread
( ) 关联的映射,并使用自身作为键在该映射中Thread.currentThread()
执行get
or 。set
例子:
ThreadLocal tl = new ThreadLocal();
tl.set(new Object()); // in this moment the implementation will do something similar to Thread.getCurrentThread().threadLocals.put(tl, [object you gave])
Object obj = t1.get(); // in this moment the implementation will do something similar to Thread.getCurrentThread().threadLocals.get(tl)
有趣的是,它ThreadLocal
是分层的,这意味着如果您为父级定义了一个值,Thread
它将可以从子级访问。