java——ThreadLocal、ThreadLocalMap、Thread三者的关系

https://www.jianshu.com/p/377bb840802f

Thread类中维护了一个成员变量:ThreadLocalMap

每个Thread有一个自己的ThreadLocalMap,ThreadLocal在get和set时,会先通过getMap()获取当前thread的ThreadLocalMap:

 

ThreadLocalMap的key和value分别是ThreadLocal实例的弱引用对象和我们要存储的值

ThreadLocalMap的enrty的key为什么要设置成弱引用?

https://blog.csdn.net/qq646040754/article/details/82493409

原文地址:https://www.cnblogs.com/gaoquanquan/p/11349367.html

时间: 2024-08-01 00:14:10

java——ThreadLocal、ThreadLocalMap、Thread三者的关系的相关文章

java get all threadlocal from thread

public void mytest() { long start = System.currentTimeMillis(); Thread thread = Thread.currentThread(); Field threadLocalsField = null; try { threadLocalsField = Thread.class.getDeclaredField("threadLocals"); threadLocalsField.setAccessible(true

java并发之Thread

线程的状态 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以下这几个状态:创建(new).就绪(runnable).运行(running).阻塞(blocked).time waiting.waiting.消亡(dead). 当需要新起一个线程来执行某个子任务时,就创建了一个线程.但是线程创建之后,不会立即进入就绪状态,因为线程的运行需要一些条件(比如内存资源,在前面的JVM内存区域划分一篇博文中知道程序计数器.Java栈.本地方法栈都是线程私有的,所以需要为线程分配一定的内存空间

java ThreadLocal(应用场景及使用方式及原理)

尽管ThreadLocal与并发问题相关,可是很多程序猿只将它作为一种用于"方便传參"的工具,胖哥觉得这或许并非ThreadLocal设计的目的,它本身是为线程安全和某些特定场景的问题而设计的. ThreadLocal是什么呢. 每一个ThreadLocal能够放一个线程级别的变量,可是它本身能够被多个线程共享使用,并且又能够达到线程安全的目的,且绝对线程安全. 比如: public final static ThreadLocal<String> RESOURCE = n

java ThreadLocal线程设置私有变量底层源码分析

前面也听说了ThreadLocal来实现高并发,以前都是用锁来实现,看了挺多资料的,发现其实还是区别挺大的(感觉严格来说ThreadLocal并不算高并发的解决方案),现在总结一下吧. 高并发中会出现的问题就是线程安全问题,可以说是多个线程对共享资源访问如何处理的问题,处理不当会的话,会出现结果和预期会完全不同. 一般情况下,多个线程访问一个变量都是公用他们的值,不过有时候虽然也是访问共享变量,不过每个线程却需要自己的私有变量.这个时候ThreadLocal就有用武之地了.下面是个ThreadL

关于Java ThreadLocal

转自:http://www.appneta.com/blog/introduction-to-javas-threadlocal-storage/ What is ThreadLocal? A simple example As its name suggests, a single instance of ThreadLocal can store different values for each thread independently. Therefore, the value stor

Java ThreadLocal 使用详解

ThreadLocal的官方API解释为: "该类提供了线程局部 (thread-local) 变量.这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本.ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联." 大概的意思有两点: ThreadLocal提供了一种访问某个变量的特殊方式:访问到的变量属于当前线

java ThreadLocal解读

Thread.java源码中: ThreadLocal.ThreadLocalMap threadLocals = null; 即:每个Thread对象都有一个ThreadLocal.ThreadLocalMap成员变量,ThreadLocal.ThreadLocalMap是一个ThreadLocal类的静态内部类(如下所示),所以Thread类可以进行引用. static class ThreadLocalMap { 所以每个线程都会有一个ThreadLocal.ThreadLocalMap对

hash code、equals和“==”三者的关系

两个对象值相同(x.equals(y) == true),则一定有相同的hash code. 这是java语言的定义:  因为:Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值.1) 对象相等则hashCode一定相等:2) hash

深入研究JAVA ThreadLocal类

深入研究java.lang.ThreadLocal类 一.概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是 threadlocalvariable(线程局部变量).也许把它命名为ThreadLocalVar更加合适.线程局部变量 (ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,是每一个线程都可以独立地改变自己的副本,而不会和其它线程