今天听一位大神提到线程安全与ThreadLocal,由于对ThreadLocal不太了解,就上网搜了一下,看到了很多人的文章,写得很复杂,众说纷纭,于是自己去看了下Oracle的文档,关于ThreadLocal有下面一段话。
This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has its own, independently initialized copy of the variable. ThreadLocal instances are typically private static fields in classes that wish to associate state with a thread (e.g., a user ID or Transaction ID).
翻译:这个类提供[本地线程]的变量。这些变量每个都有不同的副本,各个线程访问某一个变量的时候(通过set或get方法),都与得到一个它(当前线程)自己的,单独初始化的变量副本。ThreadLocal实例的典型用法是作为一个私有静态(private static)变量,与一个线程的状态相关联。(如用户ID,事务ID等等)
我想这个问题远没有那么复杂,其实可以简单的理解成,当有一个类A的实例a(注意这个实例不是ThreadLocal实例)需要被多线程访问的时候,如果想根据不同的Thread有不同的标识或者状态的话,那么就需要一个这样的变量(ThreadLocal实例,实例a的私有静态变量),来保存所有Thread的标识(用ThreadLocalMap来保存,key的个数就是当前活动的访问该实例a的线程数)。
为什么用ThreadLocal?
这个每个Thread不同的标识可能是根据Thread计算得来的,也可能是从数据库得来的值,所以每次用的时候都去取是不现实的,所以需要保存起来,等下次用到的时候直接拿来用。
Oracle的官方文档写得很明白,而且也有例子,这个类跟线程同步完全没有任何概念上的类似,完完全全两个问题,因为它不需要同步,它保存的正是每个线程不同之处。
Oracle文档出处:http://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html
分享到:
相关推荐
### Java中ThreadLocal详解 #### 一、ThreadLocal概述 在Java多线程编程中,`ThreadLocal`是一个非常重要的工具类,它提供了一种在每个线程内部存储线程私有实例的方法。通常情况下,当多个线程共享某个变量时,...
Java中的ThreadLocal是一个非常重要的工具类,它在多线程编程中扮演着独特角色,用于为每个线程提供独立的变量副本。理解ThreadLocal的工作原理和使用方法对于编写高效、安全的多线程程序至关重要。 ### ...
Java中的`ThreadLocal`类是一个非常实用的工具,它提供了线程局部变量的功能。线程局部变量意味着每个线程都拥有自己独立的变量副本,互不干扰,这在多线程编程中尤其有用,可以避免数据共享带来的同步问题。下面...
java 中ThreadLocal 的正确用法 ThreadLocal 是 Java 中的一个特殊类,它可以让每个线程拥有自己独立的变量副本,避免了多线程之间的共享变量问题。下面我们将详细介绍 Java 中 ThreadLocal 的正确用法。 用法一...
"Java 中ThreadLocal实例分析" Java 中的 ThreadLocal 实例分析是指在多线程环境下,如何使用 ThreadLocal 来实现线程安全。ThreadLocal 是 Java 中的一种机制,用于在多个线程中实现变量的隔离。 在上面的代码中...
线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突...
Java事务和ThreadLocal是两种在Java编程中至关重要的概念,它们分别用于处理多线程环境下的数据一致性问题和提供线程局部变量。 首先,我们来深入理解Java事务。在数据库操作中,事务是一系列操作的集合,这些操作...
java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多...
Java中的ThreadLocal是一个非常重要的工具类,它在多线程编程中扮演着独特角色,尤其在处理线程间数据隔离和共享时。ThreadLocal不是线程本身,而是为每个线程提供一个独立的变量副本,使得每个线程都可以独立地改变...
Java中的ThreadLocal类是一个强大的工具,它允许程序员创建线程局部变量。这意味着每个线程都有其自己独立的、不可见的变量副本,从而避免了线程间的数据共享问题,简化了多线程环境下的编程复杂性。ThreadLocal并不...
在Java编程中,ThreadLocal是一个强大的工具,它允许线程拥有自己的局部变量副本,从而避免了多线程环境下的数据共享问题。然而,如果不正确地使用ThreadLocal,可能会导致内存泄露,尤其是在Java EE容器如Tomcat中...
Java中的ThreadLocal是一种特殊的技术,它为每个线程提供了一个独立的变量副本,避免了多线程间的直接共享,从而简化了并发编程的复杂性。ThreadLocal不是一种同步机制,而是设计来解决线程间数据隔离问题的工具。 ...
总之,ThreadLocal是Java中一种强大的工具,它可以提供线程安全的局部变量,帮助开发者在多线程编程中简化数据管理,同时避免了不必要的同步开销。但使用时需要注意内存泄漏问题,确保及时清理不再使用的ThreadLocal...
彻底理解Java中的ThreadLocal ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这...
ThreadLocal是Java中的一种机制,可以将变量与线程关联起来,使得每个线程都可以拥有自己的变量副本。 ThreadLocal的出现是为了解决多线程编程中的线程安全问题。 从本质上说,ThreadLocal是一种存储机制,它可以在...
ThreadLocal是Java中用于线程局部变量的一个工具类,它的工作原理主要体现在如何在不同的线程之间隔离变量的副本,确保每个线程拥有自己的独立数据。这个设计模式在多线程编程中尤其有用,因为它避免了传统的同步...
Java中的ThreadLocal是一个非常有用的工具类,它提供了一种线程局部变量的机制。线程局部变量(ThreadLocal)的特点是每个线程都有其独立的副本,这些副本之间互不干扰,即使它们共享同一个ThreadLocal实例。这使得...
在这个例子中,getSession()方法会检查ThreadLocal中是否存在Session,若不存在则创建并设置,而closeSession()方法则负责关闭并移除当前线程的Session副本。 总结来说,ThreadLocal是Java中解决多线程数据隔离问题...
ThreadLocal是Java中一个非常重要的线程局部变量工具类,它的设计目的是为了解决多线程环境下各个线程之间的数据隔离问题。通过ThreadLocal,每个线程都可以拥有自己独立的变量副本,避免了多线程间的数据冲突和同步...