`

ThreadLocal的实现原理

 
阅读更多

调用者:

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;
    }

 

分享到:
评论

相关推荐

    jKill#basic-notes#ThreadLocal实现原理1

    通过ThreadLocal对象定位到线程:Thread.currentThread()通过ThreadLocal对象拿到所在的ThreadLocalMap: T

    ThreadLocal的原理,源码深度分析及使用.docx

    ThreadLocal 的实现原理可以分为两个部分:第一部分是 ThreadLocal 对象的创建和管理;第二部分是 ThreadLocal 对象的访问和更新。 ThreadLocal 对象的创建和管理是通过 ThreadLocalMap 来实现的。 ...

    深入理解 Java 之 ThreadLocal 工作原理1

    ThreadLocal是Java中用于线程局部变量的一个工具类,它的工作原理主要体现在如何在不同的线程之间隔离变量的副本,确保每个线程拥有自己的独立数据。这个设计模式在多线程编程中尤其有用,因为它避免了传统的同步...

    ThreadLocal原理及在多层架构中的应用

    - **简单易用**:ThreadLocal提供了一种简单的线程间数据隔离的实现方式,代码简洁,无需复杂的同步机制。 - **性能提升**:避免了线程同步的开销,提高了程序执行效率。 缺点: - **内存泄漏风险**:如果不正确地...

    ThreadLocal应用示例及理解

    假设我们需要一个线程安全的计数器,可以使用ThreadLocal实现: ```java public class ThreadLocalCounter { private static ThreadLocal<Integer> counter = new ThreadLocal(); public static void increment...

    ThreadLocal

    在Java中,ThreadLocal的工作原理是为每个线程创建一个单独的存储空间,每个线程可以独立地读写这个变量,而不会影响其他线程。当我们创建一个新的ThreadLocal实例时,它并不会立即分配内存,而是等到线程第一次调用...

    深入理解ThreadLocal工作原理及使用示例

    深入理解ThreadLocal工作原理及使用示例 ThreadLocal是Java提供的一种解决多线程程序并发问题的工具类,自JDK1.2版本以来提供了java.lang.ThreadLocal类。ThreadLocal的主要作用是为每个使用该变量的线程提供独立的...

    ThreadLocal_ThreadLocal源码分析_

    **ThreadLocal概述** ThreadLocal是Java中的一个线程局部变量类,它...通过理解ThreadLocal的原理和最佳实践,我们可以更有效地利用它来解决多线程环境下的数据隔离问题,同时也需要注意防止可能出现的内存泄漏风险。

    java 简单的ThreadLocal示例

    因此,理解ThreadLocal的工作原理并谨慎使用是非常重要的。 在提供的"ThreadLocal示例"压缩包中,可能包含了一些具体的代码示例,展示如何在实际项目中运用ThreadLocal。通过查看这些示例,你可以更深入地理解...

    使用ThreadLocal管理“session”数据

    3. **如何使用ThreadLocal实现Session管理?** 首先,定义一个ThreadLocal变量来存储session对象: ```java public class SessionThreadLocal { public static final ThreadLocal<Session> SESSION_HOLDER = new...

    java中ThreadLocal详解

    #### 二、ThreadLocal的数据结构及实现原理 `ThreadLocal`的核心数据结构是`ThreadLocalMap`。`ThreadLocalMap`本质上是一个哈希表,它使用了弱引用(Weak Reference)作为键,实现了对线程局部变量的存储。具体来...

    ThreadLocal的几种误区

    总之,ThreadLocal是一个强大的工具,但理解其工作原理和潜在风险至关重要。正确使用ThreadLocal可以提高代码的并发性能,而滥用则可能导致难以预料的问题。因此,在使用ThreadLocal时,需要充分考虑其生命周期管理...

    Java并发编程学习之ThreadLocal源码详析

    ThreadLocal的实现原理是基于ThreadLocalMap的, ThreadLocalMap是一个定制化的HashMap,默认每个线程中都为null,只有当线程第一次调用了ThreadLocal的set或者get方法的时候才会创建。ThreadLocalMap用于存放线程的...

    threadLocal

    在Java的`ThreadLocal`实现中,每个线程都有一个`ThreadLocalMap`,它是`ThreadLocal`的一个内部类,用于存储线程局部变量。`ThreadLocalMap`使用弱引用作为键,目的是在线程不再引用ThreadLocal对象时,允许垃圾...

    Java ThreadLocal详解_动力节点Java学院整理

    ThreadLocal的实现原理是基于Java的类加载机制。在每个线程中,ThreadLocal会创建一个变量副本,并将其存储在ThreadLocalMap中。ThreadLocalMap是一个特殊的HashMap,它将ThreadLocal变量与线程关联起来。 ...

    JDK的ThreadLocal理解(一)使用和测试

    本文将深入探讨ThreadLocal的使用、原理以及一些实际应用中的测试案例。 ### 1. ThreadLocal的基本用法 ThreadLocal的用法非常简单,首先创建一个ThreadLocal实例,然后通过`set()`方法设置线程局部变量的值,通过...

    java中ThreadLocal类的使用

    总结,`ThreadLocal`是Java中用于实现线程局部变量的工具,它提供了一种简单的方式在多线程环境下隔离数据,避免了传统的同步机制。但是,使用时需注意其潜在的内存泄漏风险和对代码可读性的影响,合理地选择使用...

    ThreadLocal简单Demo

    **线程局部变量(ThreadLocal)** 在Java编程中,`ThreadLocal`是...以上就是关于`ThreadLocal`及其内部类`ThreadLocalMap`的基础知识,它们在多线程编程中起到关键作用,帮助开发者实现高效、安全的线程局部变量管理。

Global site tag (gtag.js) - Google Analytics