`
pingwei000
  • 浏览: 60921 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ThreadLocal变量

阅读更多
ThreadLocal和其它所有的同步机制都是为了解决多线程中的对同一变量的访问冲突,在普通的同步机制中,是通过对象加锁来实现多个线程对同一变量的安全访问的。在1.5以前的版本中,synchronized是自动释放锁。在JDK1.5的版本中,提供了类 java.util.concurrent.locks.Lock。它比synchronized更精确和有更高的性能。这时该变量是多个线程共享的,使用这种同步机制需要有较强的多线程基础和编程经验,因为需要知道对变量进行读写的时机,什么时候需要锁定这个对象,又什么时候需要释放该对象的锁等等很多问题。所有这些都是因为多个线程共享了资源造成的。而ThreadLocal就从另一个角度来解决多线程的并发访问,ThreadLocal会为每一个线程维护一个和该线程绑定的变量的副本,从而隔离了多个线程的数据,每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。 ThreadLocal提供了线程安全的共享对象,在编写多线程代码的时候,就可以把不安全的变量封装进ThreadLocal,当然也可以把该对象的特定于线程的状态封装进ThreadLocal。
分享到:
评论

相关推荐

    Java并发编实践之ThreadLocal变量.doc

    Java并发编程实践中,ThreadLocal变量是一个非常重要的工具,它在JDK1.2版本就已经引入。ThreadLocal不是代表一个线程实例,而是一种线程局部变量的机制,它为每个线程提供了一个独立的变量副本,各个线程可以独立地...

    ThreadLocal相关

    在多线程环境下,ThreadLocal 变量可以保证各个线程的变量相对独立于其他线程内的变量。这种机制可以帮助开发者在多线程环境下编写更加简洁、可维护的代码。 ThreadLocal 的作用 ThreadLocal 的主要作用是提供线程...

    ThreadLocal应用示例及理解

    在ThreadLocal中,`set()`方法用于设置当前线程的ThreadLocal变量值,`get()`方法用于获取当前线程的ThreadLocal变量值。 ```java threadLocal.set("Hello, ThreadLocal"); String value = threadLocal.get(); ``` ...

    Java中ThreadLocal的设计与使用

    由于ThreadLocal变量是存储在线程的ThreadLocalMap中,如果线程长时间运行并且不清理ThreadLocal,当ThreadLocal对象被垃圾收集时,其在ThreadLocalMap中的引用将变为"幽灵引用"(弱引用),导致内存泄漏。...

    ThreadLocal的用处

    这意味着不同线程可以同时拥有相同ThreadLocal变量的不同实例,互不影响。 2. **创建和访问变量**: 创建ThreadLocal变量非常简单,只需定义一个ThreadLocal类型的实例即可。例如: ```java ThreadLocal<String>...

    JAVA ThreadLocal类深入

    在不再需要ThreadLocal变量时,调用remove()方法可以清除线程的副本,以减少内存占用。 ### 二、ThreadLocal API详解 1. `ThreadLocal()`:创建一个新的线程局部变量。 2. `T get()`:返回当前线程的ThreadLocal...

    ThreadLocal测试工程

    但是,如果线程内部对ThreadLocal变量的修改可能会影响其他线程(例如,通过返回ThreadLocal变量的引用),那么需要额外的同步措施。 6. **代码示例**: ```java public class ThreadLocalExample { private ...

    ThreadLocal原理及在多层架构中的应用

    - **弱引用**:ThreadLocalMap的键使用的是弱引用,当ThreadLocal变量不再被引用时,垃圾收集器可以回收ThreadLocal对象,但其在ThreadLocalMap中的引用不会立即被移除,以防止导致内存泄漏。 - **线程生命周期**:...

    ThreadLocal

    - 不适用于跨线程通信:ThreadLocal只保证同一线程内的数据隔离,不同线程间无法共享ThreadLocal变量。 - 不是线程安全的:尽管ThreadLocal提供了线程隔离,但它本身并不保证线程安全性,如果在`set`和`get`操作之间...

    ThreadLocal_ThreadLocal源码分析_

    这意味着每个线程都有自己的ThreadLocal变量,互不干扰,提供了线程安全的数据存储方式。ThreadLocal通常用于在多线程环境下为每个线程提供一个单独的实例,比如作为线程上下文的存储。 **ThreadLocal内部结构** ...

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

    - 控制并发:例如在Servlet容器中,每个请求可以分配一个ThreadLocal变量,存储请求特有的数据。 - 容器内部使用:例如Spring框架中的TransactionTemplate就是利用ThreadLocal来管理事务的。 以上是对ThreadLocal...

    ThreadLocal的几种误区

    在服务器端,线程池的存在可能导致多个用户的请求被分配到同一个线程处理,因此,如果不注意清理,ThreadLocal变量可能会被不同用户访问到,造成数据泄露。 误区三:每个用户访问会有新的ThreadLocal 理论上来讲,...

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

    每个线程内部都有一个ThreadLocalMap对象,这个对象实际上是一个Map结构,存储了当前线程的ThreadLocal变量以及其对应的值。ThreadLocalMap是ThreadLocal的内部类,它使用Entry数组来存储数据,而Entry是...

    使用Java ThreadLocal.docx

    首先,让我们来看看如何创建一个ThreadLocal变量。创建ThreadLocal变量非常简单,只需实例化ThreadLocal类即可,如下所示: ```java private ThreadLocal<String> myThreadLocal = new ThreadLocal(); ``` 这里的`...

    通向架构师的道路(第七天)之漫谈使用ThreadLocal改进你的层次的划分

    每个线程都有其独立的ThreadLocal变量副本,这样每个线程都可以独立地修改自己的副本而不影响其他线程。这有助于避免并发问题,提高代码的可读性和可维护性。 ThreadLocal主要提供了四个核心方法: 1. `set(Object...

    使用ThreadLocal管理“session”数据

    而ThreadLocal提供了一个线程局部的存储空间,每个线程都有自己的ThreadLocal变量副本,互不影响。因此,使用ThreadLocal可以在多线程环境下保证session数据的安全性,避免了同步锁带来的性能开销。 3. **如何使用...

    InheritableThreadLocal & ThreadLocal

    当我们创建一个ThreadLocal实例时,实际上是创建了一个全局的键值对存储,这个存储空间与线程相关联,每个线程有自己的独立副本,即使多个线程同时访问同一个ThreadLocal变量,也不会相互干扰。 二、...

Global site tag (gtag.js) - Google Analytics