`

ThreadLocal 源码分析

阅读更多
说明:

每个线程内部持有一个 ThreadLocalMap 的东西,而我发现 ThreadLocal 内中 nextHashCode 为静态变量,这就意味着该变量为所有 ThreadLocal 锁共有.

现在考虑一种极端情况,有两个 ThreadLocal 实例:ThreadLocalA 和 ThreadLocalB. 两个线程:ThreadA 和 ThreadB.

ThreadLocalA 存有线程A和线程B的数据. 反应到底层的数据结构是:

ThreadA.ThreadLocalMap<ThreadLocalA, Value>
ThreadB.ThreadLocalMap<ThreadLocalA, Value>

现在 ThreadLocalB 也存有线程A和线程B的数据. 反应到底层的数据结构是:

ThreadA.ThreadLocalMap<ThreadLocalB, Value>
ThreadB.ThreadLocalMap<ThreadLocalB, Value>

这时候,nextHashCode 就起作用了,每个 threadLocal 的 threadLocalHashCode 不同(存在一个神奇的 hash 值:0x61c88647),具体情况自行百度.

所以ThreadA 和 ThreadB 中存放这两个值的时候很大概率不会出现冲突. 这也是为啥 threadLocalHashCode 是 final 修饰,而 nextHashCode 是 static 修饰的原因.

原理:


0
0
分享到:
评论
3 楼 kevinflynn 2019-01-05  
2 楼 kevinflynn 2019-01-05  
[url=aaaa]
[/url]
1 楼 kevinflynn 2019-01-05  
学习到了 感谢楼主。

相关推荐

    ThreadLocal_ThreadLocal源码分析_

    ThreadLocal源码分析,主要有ThreadLocal源码以及ThreadLocal的内部结构在jdk8前后的变化

    ThreadLocal源码分析

    首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。

    ThreadLocal源码分析和使用

    ThreadLocal源码分析和使用

    ThreadLocal_ThreadLocal源码分析_源码.zip

    ThreadLocal_ThreadLocal源码分析_源码.zip

    java并发包源码分析(3)ThreadLocal

    java并发包源码分析(3)ThreadLocal 详细配图讲解 java并发包源码分析(3)ThreadLocal 详细配图讲解

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

    ThreadLocal 线程微本地变量 及 源码分析

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

    主要给大家介绍了关于Java并发编程学习之源码分析ThreadLocal的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

    ThreadLocal的原理,源码深度分析及使用.docx,这是一份ThreadLocal的技术文档

    对ThreadLocal的理解【源码分析+应用举例】

    一、简介 ThreadLocal是JDK包提供的,它提供了线程本地变量,也就是如果你创建了一个ThreadLocal变量,那么访问这个变量的每一个线程都会有这个变量的一个本地副本。...根据源码,画出ThreadLocal原理图 原创文章

    ThreadLocal内存泄露分析

    NULL 博文链接:https://liuinsect.iteye.com/blog/1827012

    Android 详解ThreadLocal及InheritableThreadLocal

     分析都是基于android sdk 23 源码进行的,ThreadLocal在android和jdk中的实现可能并不一致。  在最初使用Threadlocal的时候,很容易会产生的误解就是threadlocal就是一个线程。  首先来看下Threadlocal的简单...

    activiti源码分析

    activiti源码分析,详细介绍工作流的基础框架和一些源码

    ThreadLocal分析

    NULL 博文链接:https://gerrard-ok.iteye.com/blog/1851903

    Java并发编程学习笔记

    5、Condition源码分析 6、ReentrantReadWriteLock底层实现原理 7、并发工具类CountDownLatch 、CyclicBarrier和Semaphore底层实现原理 8、线程池原理和如何使用线程池 9、ThreadLocal 为什么会内存泄漏 10、Volatile...

    jdk1.8-source:JDK1.8源码分析包

    JDK1.8源码分析 相关的原始码分析结果会以注解的形式体现到原始码中 已完成部分: ReentrantLock CountDownLatch Semaphore HashMap TreeMap LinkedHashMap ConcurrentHashMap 执行器 ...

    并发编程总结.xmind

    java并发编程总结,包括多线程安全机制分析总结,Unsafe源码分析总结,并发工具类总结,ThreadLocal原理和使用,Fork/Join框架使用总结,同步容器和并发容器源码分析

    架构探险 原书源码

    接着通过一个简单的应用场景,为该 Web 应用添加若干业务功能,从需求分析与系统设计开始,带领读者动手完成该 Web 应用,完善相关细节,并对已有代码进行优化;然后基于传统 Servlet 框架搭建一款轻量级 Java Web ...

    积分管理系统java源码-AndroidKnowledgeSystem:Android知识架构体系

    源码分析concurrent包 ConcurrentHashMap CopyOnWriteArrayList BlockingQeque ThreadLocal 反射 Kotlin Kotlin的优势 协程 Android热门技术 代码插桩技术 动态代理 插件化 热修复 日志系统 OKHttp Jetpack LiveData...

    Java 高并发九:锁的优化和注意事项详解

    本文主要介绍Java高并发锁的优化和注意事项,这里整理了详细的资料,并讲解了 1. 锁优化的思路和方法 2. 虚拟机内的锁优化 3. 一个错误使用锁的案例 4. ThreadLocal及其源码分析等知识,有需要的小伙伴可以参考下

    阿里P7面试题整理集合

    1)多线程(ThreadLocal(问了父子线程怎么共享数据 interitableThreadLocals)、lock和sync区别(问HashMap1.7、1.8区别时带出)、 AQS原理(执行过程源码,入队出队的细节,源码细节)、CountDownLatch和 ...

Global site tag (gtag.js) - Google Analytics