Java——ThreadLocal的使用

简介:

概述

ThreadLocal:依附在线程上的变量的媒介。在每一个Thread类中都有一个ThreadLocalMap的实例,源码中是这样体现的 
  /* ThreadLocal values pertaining to this thread. This map is maintained
   * by the ThreadLocal class. 
   */
    ThreadLocal.ThreadLocalMap threadLocals = null;
  ThreadLocalMap是以ThreadLocal对象为键,任意对象为值的Map.通过ThreadLocal类中的 get,set,initialValue方法可以获取,设置,初始化:依靠ThreadLocal类作为媒介依附在线程上的任意对象。

使用场景

一个对象功能的施展需要依赖于一个线程:如唯一标示一个线程,用来调试并发执行的程序哪个线程出现了问题;或者用来追踪多线程环境下每一个线程的执行轨迹。在数据库中,一个事务可能会重复的拿同一个锁,以及维护自身的SavePoint,以便回滚的时候使用到。实际上一个事务就对应着一个线程,通过ThreaLocald把事务的实现类依附在线程上,这样就方便处理锁的缓存,事务回滚,日志记录等问题了。

例子

用ThreadLocal实现CLH锁的时候用到
https://yq.aliyun.com/articles/124841?spm=5176.8091938.0.0.fRxoE5

目录
相关文章
|
4月前
|
存储 Java 数据安全/隐私保护
探索Java中神奇的ThreadLocal:为什么它是多线程编程的重要工具?
探索Java中神奇的ThreadLocal:为什么它是多线程编程的重要工具?
|
7月前
|
存储 Java
java之线程死锁和ThreadLocal的使用
java之线程死锁和ThreadLocal的使用
|
25天前
|
存储 Java
Java的ThreadLocal使用
Java的ThreadLocal使用
19 1
|
2月前
|
安全 Java
java中线程经常被问到ThreadLocal你懂吗?
java中线程经常被问到ThreadLocal你懂吗?
11 0
|
3月前
|
存储 Java 数据库连接
详解Java中ThreadLocal类型
详解Java中ThreadLocal类型
31 1
|
8月前
|
存储 安全 Java
【Java】线程数据共享和安全 -ThreadLocal
今天我要为大家推荐一个Java中非常实用且神奇的工具——ThreadLocal。它可以让我们在多线程环境下,轻松地实现线程私有的数据存储。它可以帮助我们在多线程环境下轻松解决变量共享和线程安全的问题。
|
4月前
|
存储 监控 Java
Java 中的 ThreadLocal:概念、应用及代码示例
Java 中的 ThreadLocal:概念、应用及代码示例
39 0
|
10月前
|
存储 人工智能 移动开发
【Java基础】解锁多线程安全的秘密武器:探索ThreadLocal的神奇力量!
ThreadLocal是Java中的一个类,用于在多线程环境下,为**每个线程**提供**独立的变量副本**。每个线程都可以独立地访问自己的变量副本,因为该独立变量属于**当前线程**,对其他线程而言是隔离的,不会与其他线程的副本产生冲突。
|
6月前
|
安全 Java 数据库连接
ThreadLocal Java多线程下的影分身之术
后来,我把c删掉,变成了下面这样。如果我现在想查h,按照上面getEntry的逻辑,是不是遍历到3就停了,所以找不到h了? getEntry的逻辑表面确实是这样,但实际上getEntryAfterMiss、remove、gets时都会直接或者间接调用expungeStaleEntry会对表里的数据做整理。expungeStaleEntry()除了利用弱引用的特性对tab中Entry做清理外,还会对之前Hash冲突导致后移的Entry重新安放位置。所以不可能出现下面这种tab排放的。
22 0
|
7月前
|
Java 容器
java 浅谈ThreadLocal底层源码(通俗易懂)
java ThreadLocal介绍及源码分析 通俗易懂!
48 0