Java多线程:带你了解神秘的线程变量 ThreadLocal

本文详细介绍了Java多线程中的关键概念ThreadLocal,包括其创建、访问流程,核心实现原理,线程安全的保证以及与传统同步机制的区别。通过示例代码和分析,帮助开发者深入理解ThreadLocal的工作机制。
摘要由CSDN通过智能技术生成

前言

  • 在 Java 多线程中,线程变量 ThreadLocal 非常重要,但对于很多开发者来说,这并不容易理解,甚至觉得有点神秘
  • 今天,我将献上一份 ThreadLocal 的介绍 & 实战攻略 ,希望你们会喜欢。

目录

 

示意图

1. 简介

 

示意图

2. 使用流程

主要是创建 ThreadLocal 变量 & 访问 ThreadLocal 变量

2.1 创建ThreadLocal变量

共有3种方式,具体如下

// 1. 直接创建对象
private ThreadLocal myThreadLocal = new ThreadLocal()
// 2. 创建泛型对象
private ThreadLocal myThreadLocal = new ThreadLocal<String>();
// 3. 创建泛型对象 & 初始化值
// 指定泛型的好处:不需要每次对使用get()方法返回的值作强制类型转换
private ThreadLocal myThreadLocal = new ThreadLocal<String>() {
 @Override
 protected String initialValue() {
 return "This is the initial value";
 }
};
// 特别注意:
// 1. ThreadLocal实例 = 类中的private、static字段
// 2. 只需实例化对象一次 & 不需知道它是被哪个线程实例化
// 3. 每个线程都保持 对其线程局部变量副本 的隐式引用
// 4. 线程消失后,其线程局部实例的所有副本都会被垃圾回收(除非存在对这些副本的其他引用)
// 5. 虽然所有的线程都能访问到这个ThreadLocal实例,但是每个线程只能访问到自己通过调用ThreadLocal的set()设置的值
 // 即 哪怕2个不同的线程在同一个`ThreadLocal`对象上设置了不同的值,他们仍
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值