调用者:
private static ThreadLocal s_doneCode = new ThreadLocal();
public static long getDoneCode() {
Long done_code = (Long)s_doneCode.get();
if (done_code == null) {
long doneCode = 100000000000000L;
doneCode = doneCode + ServiceManager.getDoneCode();//这里是取的getNewId,不用考虑同步问题
done_code = new Long(doneCode);
s_doneCode.set(done_code);
}
return done_code.longValue();
}
public static void setDoneCode(long doneCode) {
s_doneCode.set(new Long(doneCode));
}
public static void clearDoneCode() {
s_doneCode.remove();
ServiceManager.setDoneCode(null);
}
JDK源码:
ThreadLocal类:
public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null)
return (T)e.value;
}
return setInitialValue();
}
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}
/**
* Get the map associated with a ThreadLocal. Overridden in
* InheritableThreadLocal.
*
* @param t the current thread
* @return the map
*/
ThreadLocalMap getMap(Thread t) {
return t.threadLocals;
}
分享到:
相关推荐
通过ThreadLocal对象定位到线程:Thread.currentThread()通过ThreadLocal对象拿到所在的ThreadLocalMap: T
ThreadLocal 的实现原理可以分为两个部分:第一部分是 ThreadLocal 对象的创建和管理;第二部分是 ThreadLocal 对象的访问和更新。 ThreadLocal 对象的创建和管理是通过 ThreadLocalMap 来实现的。 ...
ThreadLocal是Java中用于线程局部变量的一个工具类,它的工作原理主要体现在如何在不同的线程之间隔离变量的副本,确保每个线程拥有自己的独立数据。这个设计模式在多线程编程中尤其有用,因为它避免了传统的同步...
- **简单易用**:ThreadLocal提供了一种简单的线程间数据隔离的实现方式,代码简洁,无需复杂的同步机制。 - **性能提升**:避免了线程同步的开销,提高了程序执行效率。 缺点: - **内存泄漏风险**:如果不正确地...
假设我们需要一个线程安全的计数器,可以使用ThreadLocal实现: ```java public class ThreadLocalCounter { private static ThreadLocal<Integer> counter = new ThreadLocal(); public static void increment...
在Java中,ThreadLocal的工作原理是为每个线程创建一个单独的存储空间,每个线程可以独立地读写这个变量,而不会影响其他线程。当我们创建一个新的ThreadLocal实例时,它并不会立即分配内存,而是等到线程第一次调用...
深入理解ThreadLocal工作原理及使用示例 ThreadLocal是Java提供的一种解决多线程程序并发问题的工具类,自JDK1.2版本以来提供了java.lang.ThreadLocal类。ThreadLocal的主要作用是为每个使用该变量的线程提供独立的...
**ThreadLocal概述** ThreadLocal是Java中的一个线程局部变量类,它...通过理解ThreadLocal的原理和最佳实践,我们可以更有效地利用它来解决多线程环境下的数据隔离问题,同时也需要注意防止可能出现的内存泄漏风险。
因此,理解ThreadLocal的工作原理并谨慎使用是非常重要的。 在提供的"ThreadLocal示例"压缩包中,可能包含了一些具体的代码示例,展示如何在实际项目中运用ThreadLocal。通过查看这些示例,你可以更深入地理解...
3. **如何使用ThreadLocal实现Session管理?** 首先,定义一个ThreadLocal变量来存储session对象: ```java public class SessionThreadLocal { public static final ThreadLocal<Session> SESSION_HOLDER = new...
#### 二、ThreadLocal的数据结构及实现原理 `ThreadLocal`的核心数据结构是`ThreadLocalMap`。`ThreadLocalMap`本质上是一个哈希表,它使用了弱引用(Weak Reference)作为键,实现了对线程局部变量的存储。具体来...
总之,ThreadLocal是一个强大的工具,但理解其工作原理和潜在风险至关重要。正确使用ThreadLocal可以提高代码的并发性能,而滥用则可能导致难以预料的问题。因此,在使用ThreadLocal时,需要充分考虑其生命周期管理...
ThreadLocal的实现原理是基于ThreadLocalMap的, ThreadLocalMap是一个定制化的HashMap,默认每个线程中都为null,只有当线程第一次调用了ThreadLocal的set或者get方法的时候才会创建。ThreadLocalMap用于存放线程的...
在Java的`ThreadLocal`实现中,每个线程都有一个`ThreadLocalMap`,它是`ThreadLocal`的一个内部类,用于存储线程局部变量。`ThreadLocalMap`使用弱引用作为键,目的是在线程不再引用ThreadLocal对象时,允许垃圾...
ThreadLocal的实现原理是基于Java的类加载机制。在每个线程中,ThreadLocal会创建一个变量副本,并将其存储在ThreadLocalMap中。ThreadLocalMap是一个特殊的HashMap,它将ThreadLocal变量与线程关联起来。 ...
本文将深入探讨ThreadLocal的使用、原理以及一些实际应用中的测试案例。 ### 1. ThreadLocal的基本用法 ThreadLocal的用法非常简单,首先创建一个ThreadLocal实例,然后通过`set()`方法设置线程局部变量的值,通过...
总结,`ThreadLocal`是Java中用于实现线程局部变量的工具,它提供了一种简单的方式在多线程环境下隔离数据,避免了传统的同步机制。但是,使用时需注意其潜在的内存泄漏风险和对代码可读性的影响,合理地选择使用...
**线程局部变量(ThreadLocal)** 在Java编程中,`ThreadLocal`是...以上就是关于`ThreadLocal`及其内部类`ThreadLocalMap`的基础知识,它们在多线程编程中起到关键作用,帮助开发者实现高效、安全的线程局部变量管理。