以前经常用到ThreadLocal,但是没有深入的看过.这次有机会看了一下源码,发现了一些以前没有发现的问题.
1)ThreadLocal的实现是给每一个Thread维护一个Map. 并且这个Map也是在Thread里面声明的,如果没有初始化这个Map.ThreadLocal会帮忙初始化. 详情可以参考ThreadLocal.createMap().
2)每一个Thread只可以托管一个对象.查看ThreadLocal.set()方法,你会发现key值是不变的.因为多个Thread拿到的是同一个ThreadLocal实例,而this就是指向ThreadLocal. 换句话说,也就是所有的Thread共享的同一个Key,只是不同的Thread有各自的Map.
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}
3)一个猜想:为什么需要使用Map,其实没有很大的必要.只是因为每一个Thread已经声明了一个Map,并且使用这个可以很好的统一起来.就直接使用了. 实在是找不到其他原因要放一个Map在这.因为一个线程只通过ThreadLocal维护了一个实例.
分享到:
相关推荐
Quartz 是一个开源的作业调度框架,用于在 Java 应用程序中安排任务。...同时,还可以深入学习 Java 基础,提升编程能力。记得实践是检验真理的唯一标准,动手操作这些 demo,会让你对这些知识点有更深入的理解。
- `HttpClient学习笔记.doc`: 可能包含了关于Apache HttpClient的使用教程,包括如何创建HTTP请求,执行GET和POST操作,以及设置请求头和处理响应等内容。 - `HTTP中Get与Post的区别.doc`: 深入解析HTTP协议中的GET...
在IT行业中,线程安全和事务管理是两个非常重要的概念,尤其在多线程环境下的分布式系统中。本文将深入探讨ThreadLocal的使用以及...通过深入学习源码和实际应用,我们可以更好地理解其工作原理,并在实践中灵活运用。
通过深入源码学习,我们可以更好地理解Spring如何在多线程环境中优雅地管理事务,以及如何利用ThreadLocal来优化并发性能。同时,了解数据库连接池的工作原理也有助于我们更好地配置和使用连接池,提升应用程序的...
ThreadLocal是Java编程中一个非常重要的工具类,它允许我们在多线程环境下为每个线程创建独立的变量副本。在每个线程内部,ThreadLocal变量就像一个私有的局部变量,不同线程之间的副本互不干扰,确保了数据的安全性...
ThreadLocal是Java编程语言中的一个线程局部变量类,它为每个线程提供了一个独立的变量副本,使得每个线程可以独立地改变自己的副本,而不会影响其他线程所...这有助于深入学习和掌握Java并发编程中的这一重要工具。
标题“Hibernage_Session_Manager_ThreadLocal”涉及到的是Hibernate框架中的一种优化策略——使用ThreadLocal管理Session。...理解这些知识点对于深入学习Hibernate和优化Java Web应用的数据库操作至关重要。
【ThreadLocal那点事儿编程开发技术共6页.pdf】 这篇文档深入探讨了Java中的ThreadLocal类,这是一个在多线程编程中非常关键的工具。...如果你希望深入理解ThreadLocal,这份文档无疑是一个很好的学习资源。
内容概要:本文深入解析了Java中的ThreadLocal工具类,包括其常见应用场景及其原理和源码分析。通过Demo示例介绍了如何利用ThreadLocal实现线程间的隔离,使各个线程可以拥有独立的变量副本而不互相干扰。文章详细...
Java ThreadLocal 是一个非常重要的工具类,它提供了一种在多线程环境下为每个线程维护独立变量副本的机制。这种机制使得各个线程能够拥有自己的变量实例,而不会互相干扰,降低了数据共享的复杂性。 ### 应用场景 ...
在Java编程语言中,多线程是并发编程的基础,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应...ThreadTest.zip资源将帮助开发者深入学习这些概念,并通过实际案例加深理解,提升在并发编程领域的技能。
在Spring框架中,实现数据库操作是开发中的一项基础任务...同时,ThreadLocal的运用也为多线程环境下保持数据隔离提供了有效的解决方案,这些知识对于任何想要深入学习Spring和数据库操作的开发者来说都是必不可少的。
线程同步是多线程编程中的关键概念,用于控制多个线程对共享资源的访问,以...通过深入学习和实践这些机制,开发者可以编写出高效、可靠的并发程序。同时,了解并发编程中的内存管理、性能优化和最佳实践也至关重要。
这些文件可能包含了更深入的并发编程知识,例如.NET平台的并发机制,`ThreadLocal`如何在每个线程中提供独立的变量副本,以及`TimeUnit`在处理时间延迟和等待时的重要性。 `ThreadLocal`是Java中另一种用于多线程...
在IT行业中,多线程是实现高...总结来说,多线程基础部分的学习涵盖了线程创建、线程状态、线程同步、ThreadLocal的使用以及并发编程的高级概念。通过深入理解这些内容,开发者可以编写出更加高效、稳定的多线程程序。
本教程“Struts2 学习 2”将深入探讨Struts2的核心概念和技术,通过一系列文档帮助你掌握这个框架的关键要点。 一、ActionContext的理解与应用 在“第九讲 ActionContext.docx”中,你将学习到ActionContext是...
Java编程语言作为全球最受欢迎的开发语言之一,深受程序员的喜爱,尤其对于想要深入学习和掌握Java技术的开发者来说,了解和研究开源项目是非常重要的途径。"学习Java必看的东西"这个主题,显然指向了通过开源项目来...
深入学习GC的工作原理,包括分代收集、可达性分析、各种GC算法(如Serial、Parallel、CMS、G1、ZGC等),可以帮助优化内存使用和避免内存泄漏。 3. **并发与多线程**:Java提供了丰富的并发API,如synchronized、...
从【描述】中我们可以推断,这个压缩包可能包含了许多未知但有价值的内容,适合Java初学者及进阶者进行深入学习。 在Java学习的道路上,首先会接触到的是基础概念,如面向对象编程思想,类、对象、接口、继承、封装...
同时,深入学习Java集合框架,如ArrayList、LinkedList、HashMap等,是提升编程能力的重要环节。 随着对基础知识的掌握,程序员会逐渐接触到面向对象设计原则,如单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则...