一般用法:
class Test{
public static ThreadLocal test = new ThreadLocal();
public static String getThreadLocalTest(){
return test.get();
}
public static void setThreadLocalTest(String value){
test.set(value);
}
}
当test.set(value)给ThreadLocal变量值时, 低层方法实现:将当前的ThreadLocal实例做为key, 将值做为value,做为Map, 跟当前线程绑定的, 在代码的其他的地方, 可以直接Test.getThreadLocalTest(),获取当前线程的ThreadLocal为key的值
1、ThreadLocal类中的代码
public void set(T value) { Thread t = Thread.currentThread(); //取得当前线程的ThreadLocal的内部类ThreadLocalMap ThreadLocalMap map = getMap(t); //如果有值, 修改, 如果没有, if (map != null) map.set(this, value); else createMap(t, value); } public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) return (T)map.get(this); // Maps are constructed lazily. if the map for this thread // doesn't exist, create it, with this ThreadLocal and its // initial value as its only entry. T value = initialValue(); createMap(t, value); return value; } ThreadLocalMap getMap(Thread t) { return t.threadLocals; }
2、Thread类
publicclass Thread implements Runnable {
......
/* ThreadLocal values pertaining to this thread. This map is maintained
* by the ThreadLocal class. */
//Thread类中有一个属性是:ThreadLocalMap,与当前线程绑定的值
ThreadLocal.ThreadLocalMap threadLocals = null;
......
}
相关推荐
### 正确理解ThreadLocal:深入解析其工作原理与应用场景 #### 一、ThreadLocal的基本概念 `ThreadLocal`是Java平台提供的一种线程局部变量的解决方案,它为每一个使用该变量的线程都提供了独立的变量副本,使得每...
- 内存泄漏:如果线程长时间存活,或者ThreadLocal对象没有被正确清理,可能导致ThreadLocalMap中的引用无法被垃圾回收,从而造成内存泄漏。 - 不适用于跨线程通信:ThreadLocal只保证同一线程内的数据隔离,不同...
1. 多线程:理解ThreadLocal的使用必须建立在对多线程的理解基础上,包括线程的创建、执行、同步机制等。 2. 并发编程:ThreadLocal是解决并发问题的一种策略,它提供了一种避免共享状态的方式,减少了锁的使用。 3....
ThreadLocal是Java编程中一种非常特殊的变量类型,它主要...正确使用ThreadLocal可以提高代码的并发性能,而滥用则可能导致难以预料的问题。因此,在使用ThreadLocal时,需要充分考虑其生命周期管理和线程安全问题。