`
cectsky
  • 浏览: 45756 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

【java】java.lang.ThreadLocal类学习

阅读更多

郁闷,本想学习Hibernate来着,看着看着就发现Hibernate用到了ThreadLocal,我嚓,好熟悉,哦,我知道了,本地线程嘛,easy!错,它和线程根本就扯不上任何猫关系(PS:上个月鹿樵问我来着,我说没用过

 

对于应用场合和概念就不分析了,javaeye上有人分析的不错了已经。主要看下源码哈。

 

/**
     * Returns the value in the current thread's copy of this thread-local
     * variable.  Creates and initializes the copy if this is the first time
     * the thread has called this method.
     *
      */
    public Object get() {
        Thread t = Thread.currentThread();
//ThreadLocalMap是 static inner class ,骂吧的一提到内部类就想到Hashmap纠结啊! 这个Hashmap维护了key是线程号,value是变量副本的结构
        ThreadLocalMap map = getMap(t);
        
       if (map != null) 
            return map.get(this);//根据thread查找对应的变量副本

        // 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.
//第一次访问的时候才执行,第一次默认返回null,如果不想要null,你懂的,哦,我懂的
        Object value = initialValue();
        createMap(t, value);
        return value;
    }

//protected,不用我多说,一看就知道是什么目的,擦,return null
protected Object initialValue() {
        return null;
    }

//new 一个ThreadLocalMap对象吧,第一次搞进去个null,以后就随便搞吧
void createMap(Thread t, Object firstValue) {
        t.threadLocals = new ThreadLocalMap(this, firstValue);
    }


public void set(Object value) {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null) 
            map.set(this, value);
        else
            createMap(t, value);
    }

 

其实,感觉就是外面加了一个衣服一样,有get和set方法,内部结构用Hashmap实现,速度快一点点啦。19点30了,赶紧下班走人。哎,hibernate还没看完,到引出这么一坛子事情。

分享到:
评论

相关推荐

    入研究java.lang.ThreadLocal类.docx

    ### 知识点详解:Java.lang.ThreadLocal 类 #### 一、概述 **ThreadLocal** 并非线程的一种特殊实现形式,而是一种为每个线程提供独立副本的机制,通常被称为“线程局部变量”。这种机制使得每个线程都可以独立...

    Can't find a codec for class java.math.BigDecimal.txt

    解决mongo数据插入时 报错问题 mogodb插入数据时报错Can't find a codec for class java.math.BigDecimal

    java.lang包介绍

    在Java 2(J2SE)中,`java.lang`包添加了一些新的类和方法,如`InheritableThreadLocal`,`ThreadLocal`的扩展,使得子线程可以继承父线程的变量,以及`SecurityManager`,用于实现安全管理策略。 过时方法在Java ...

    threadlocal:java.lang.ThreadLocal 的实验性无等待并发实现

    【标题】:“线程本地(ThreadLocal):Java.lang.ThreadLocal 的实验性无等待并发实现” 在Java编程中,`ThreadLocal`是一个非常重要的工具类,它提供了线程局部变量的功能。线程局部变量是局限于单个线程的变量,...

    java_lang包详解.pdf

    java.lang包还包含了一些与安全、线程和内存管理相关的类,如SecurityManager用于安全管理,Thread和ThreadGroup是线程相关的类,ClassLoader负责加载类,ThreadLocal为每个线程提供独立的变量副本,而Runtime类提供...

    java_javalang包.pdf

    最后,`Thread`和`ThreadGroup`类构成了Java的多线程机制,`ThreadLocal`则提供线程私有的变量,确保每个线程都有自己的副本,不会互相干扰。 总的来说,`java.lang`包是Java程序的基础,其提供的类和接口构成了...

    java.lang研究

    在Java 2中,一些新类和方法被添加到`java.lang`包,如`ThreadLocal`、`RuntimePermission`等,以增强安全性、多线程支持和性能优化。 值得注意的是,虽然`java.lang`包中的许多类在早期版本的Java中就已经存在,但...

    java-java-lang包.pdf

    Java编程语言中的java.lang包是一个核心包,它提供了Java语言运行时的基础类库,包含了Java程序运行的基本数据类型、异常处理类以及一些用于系统级别的工具类和接口。java.lang包中的类和接口不需要程序员显示地导入...

    java-lang包详解

    在Java编程语言中,`java.lang`包是所有Java程序的基础,因为它包含了许多核心类和接口,这些类和接口是编写任何Java应用程序所必需的。由于这个包是自动导入的,因此程序员无需在代码中显式地导入`java.lang`。 1....

    threadlocal.rar

    ThreadLocal,全称为`java.lang.ThreadLocal`,是Java中一个非常重要的工具类,它主要用于在多线程环境中提供线程局部变量。ThreadLocal不是用来解决线程安全问题的,而是为每个线程创建独立的变量副本,确保线程间...

    Java资料-详解ThreadLocal

    `ThreadLocal`的全称是`java.lang.ThreadLocal`,它并不是一个线程,而是一个线程局部变量的容器。`ThreadLocal`的工作原理是为每个线程创建一个单独的实例副本,这些副本存储在一个与线程相关的映射表中。当线程...

    javathread.part05.rar

    Java线程是多任务编程中的核心概念,尤其在Java中,理解并掌握线程...解压后,你可以深入学习线程的调度策略、线程局部变量(`ThreadLocal`)、线程优先级以及其他并发工具类的使用,进一步提升你的Java并发编程能力。

    JAVA API1.6中文文档.CHM

    4. **多线程**:`java.lang.Thread`和`java.util.concurrent`包提供了线程相关类和接口,用于实现并发编程,如`Runnable`、`ThreadLocal`、`ExecutorService`。 5. **网络编程**:`java.net`包包含网络通信所需的...

    Java动态代理.pdf

    JDK动态代理主要依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。当目标对象实现了至少一个接口时,Spring会使用JDK的动态代理来创建一个代理对象,这个代理对象会拦截所有对目标...

    Java装逼指南.pdf

    java.lang - **Short**、**Integer**等包装类提供了数值转换、比较等方法。 - **String**:不可变字符串类,支持多种操作,如拼接、查找、替换等。 - **Thread**:用于创建和管理线程,提供了启动、中断、等待等...

    Java多线程编程中ThreadLocal类的用法及深入

    早在 JDK 1.2 的时代,java.lang.ThreadLocal 就诞生了,它是为了解决多线程并发问题而设计的,只不过设计得有些难用,所以至今没有得到广泛使用。其实它还是挺有用的,不相信的话,我们一起来看看这个例子吧。 一个...

    Java面试要点(适用于2年以上经验,1年亦可)

    1. java.lang.management.*、javax.management.* 泛型 1. 泛型与继承类型擦除 2. 泛型中 K T V E 等的含义 3. 泛型各种用法 单元测试 1. junit、mock、mockito、内存数据库(h2) 正则表达式 1. java.lang....

    java 1.8 API 中文版

    3. **并发编程**:`java.util.concurrent`包提供了高效的并发工具,如ExecutorService、Future、Callable、ThreadLocal和各种并发集合(ConcurrentHashMap、CopyOnWriteArrayList等),以及锁和同步工具类。...

    Java9_Code.zip

    5. **线程局部变量改进** (`ThreadLocal`):虽然Java 9没有直接改变`ThreadLocal` API,但它提供了一个`ThreadLocalRandom`类,这个类为每个线程提供了一个独立的随机数生成器,避免了线程安全问题,提高了并发性能...

Global site tag (gtag.js) - Google Analytics