`

ThreadLocal 简单分析

    博客分类:
  • java
阅读更多

 

   ThreadLocal<T> 是一个泛型类

   protected T initialValue() {   return null;  }// 用于初始化 

   private final ThreadLocal<Map<Object, Object>> store;

    public ThreadLocalCache(URL url) {
        this.store = new ThreadLocal<Map<Object, Object>>() {
            @Override
            protected Map<Object, Object> initialValue() {
                return new HashMap<Object, Object>();
            }
        };
    }

 

  ThreadLocal 里面有一个ThreadLocalMap class,这个Map通过 Thread的 threadLocalHashCode和nextHashCode 值算出 hashCode 

 

  Thread存储一个字段:保存了ThreadLocalMap 

   t.threadLocals = new ThreadLocalMap(this, firstValue);  // this = ThreadLocal实例

   

   ThreadLocalMap 取值判断

   private Entry getEntry(ThreadLocal key) {
            int i = key.threadLocalHashCode & (table.length - 1);
            Entry e = table[i];
            if (e != null && e.get() == key) // 不同的ThreadLocal 即使hashCode一样 也不会取到相同的值   
               return e;
            else 
                return getEntryAfterMiss(key,i,e); 

 

    ThreadLocal的remove get set 其实就是对Thread实例的字段操作

 

 附: 别人的代码  

public class ThreadLocalCache implements Cache {

    private final ThreadLocal<Map<Object, Object>> store;

    public ThreadLocalCache(URL url) {
        this.store = new ThreadLocal<Map<Object, Object>>() {
            @Override
            protected Map<Object, Object> initialValue() {
                return new HashMap<Object, Object>();
            }
        };
    }

    public void put(Object key, Object value) {
        store.get().put(key, value);
    }

    public Object get(Object key) {
        return store.get().get(key);
    }

}

 

 

 

 

分享到:
评论

相关推荐

    ThreadLocal_ThreadLocal源码分析_源码.zip

    ThreadLocal的使用非常简单,主要包括以下几个步骤: 1. 创建ThreadLocal实例:首先,你需要创建一个ThreadLocal实例,这将作为线程局部变量的模板。 2. 设置值:使用`set(T value)`方法为当前线程设置值,这个值只...

    ThreadLocal分析

    在分析ThreadLocal源码时,可以了解到它如何在内部实现线程隔离,以及ThreadLocalMap的结构和工作方式。理解这些细节有助于我们更好地利用ThreadLocal,同时避免可能出现的问题。通过阅读源码,我们可以发现...

    简单分析Java线程编程中ThreadLocal类的使用共

    ThreadLocal并非是简单的变量,而是一种能够确保每个线程都拥有独立副本的变量容器。理解ThreadLocal的工作原理以及如何正确使用它是Java并发编程的关键。 首先,ThreadLocal类的主要作用是为每个线程创建一个单独...

    ThreadLocal的用处

    创建ThreadLocal变量非常简单,只需定义一个ThreadLocal类型的实例即可。例如: ```java ThreadLocal&lt;String&gt; threadLocalVar = new ThreadLocal(); ``` 要访问或设置线程局部变量的值,使用`set()`和`get()`...

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

    ThreadLocal 的原理、源码深度分析及使用 ThreadLocal 是 Java 语言中的一种机制,用于实现线程本地存储,能够帮助开发者在多线程环境下解决变量访问安全的问题。下面将对 ThreadLocal 的原理、实现机制、使用方法...

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

    ThreadLocal的用法非常简单,首先创建一个ThreadLocal实例,然后通过`set()`方法设置线程局部变量的值,通过`get()`方法获取该值。需要注意的是,ThreadLocal中的变量并不是存储在堆内存中,而是存储在线程的...

    Synchronized与ThreadLocal

    ### Synchronized与ThreadLocal #### 一、Synchronized机制详解 **Synchronized** 是 Java 中一个非常重要的关键字,主要...这正是 ThreadLocal 的强大之处,它提供了一种简单而高效的方式来处理线程局部变量的问题。

    理解threadlocal

    通过以上分析,我们可以看到`ThreadLocal`为多线程环境下的编程提供了一种简洁优雅的解决方案。它不仅能够避免复杂的同步问题,还能有效地管理线程间的变量隔离。理解`ThreadLocal`的工作原理及其使用方法,可以帮助...

    ThreadLocal 线程本地变量 及 源码分析.rar_开发_设计

    以上是对ThreadLocal的简单介绍和源码分析,实际使用中还需要结合具体业务场景进行合理设计和优化。通过深入理解ThreadLocal的工作原理,可以帮助我们更好地利用这一工具,提高代码的并发性能和可维护性。

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

    它可以使每个线程对共享变量的访问都是线程安全的,使得多线程编程变得更加简单。 ThreadLocal的实现原理是基于ThreadLocalMap的, ThreadLocalMap是一个定制化的HashMap,默认每个线程中都为null,只有当线程第一...

    Java ThreadLocal类应用实战案例分析

    Java ThreadLocal类应用实战案例分析 Java ThreadLocal类是Java语言中的一种线程局部变量机制,允许每...Java ThreadLocal类提供了一种简单而有效的方式来实现线程局部变量,使得多线程之间的变量冲突问题得到了解决。

    Java ThreadLocal用法实例详解

    ThreadLocal的基本使用非常简单,只需要定义一个ThreadLocal变量,然后使用set方法设置初始值,使用get方法获取当前线程的值。 ThreadLocal的实现原理基于ThreadLocalMap,该map将每个线程作为key,线程局部变量...

    Spring基于ThreadLocal的“资源-事务”线程绑定设计的缘起

    题目起的有些拗口了,简单说,这篇文章想要解释Spring为什么会选择使用ThreadLocal将资源和事务绑定到线程上,这背后有着什么样的起因和设计动机,通过分析帮助大家更清晰地认识Spring的线程绑定机制。访问任何带有...

    servlet与Struts action线程安全问题分析

    3. **使用ThreadLocal:** ThreadLocal提供了一种在每个线程中维护独立副本的机制,可以用来存储线程特定的信息,避免线程间的数据冲突。 4. **重构代码:** 将线程敏感的代码重构为无状态或线程安全的组件,减少...

    Android Handler事件分析处理1

    在主线程中,`sMainLooper`使得大部分UI相关的消息处理变得简单,而在自定义线程中,我们需要手动初始化`Looper`来处理特定线程的消息。理解这一机制对于高效地编写多线程Android应用至关重要。

    servlet与Struts action线程安全问题分析(pdf)

    3. **使用线程局部变量**:利用`ThreadLocal`类来为每个线程提供独立的变量副本,这样即使多个线程并发访问也不会影响到其他线程的变量值。 4. **使用不可变对象**:不可变对象在创建后就不能再被修改,因此在多...

    Spring5源码分析心得

    ### Spring5源码分析心得 #### 一、Spring框架中常用的设计模式 Spring框架作为一款优秀的Java企业级应用开发框架,其内部集成了多种设计模式,不仅有助于提高系统的可维护性和扩展性,还能够让开发者更好地理解和...

    threadlocalpool:演示池环境中的线程局部变量

    ThreadLocal的工作原理可以简单概括为以下步骤: 1. 创建ThreadLocal对象:程序员首先创建一个ThreadLocal实例,然后在这个实例上定义要存储的变量。 2. 初始化值:每个线程在第一次访问ThreadLocal的get()或set()...

    架构探险 从零开始写Java Web框架.pdf

    本书首先从一个简单的Web应用开始,让读者学会如何使用IDEA、Maven Git等开发工具搭建Java web应用:接着通过一个简单的应用场景,为该Web应用添加若干业务功能,从需求分析与系统设计开始,带领读者动手完成该Web...

Global site tag (gtag.js) - Google Analytics