JUC-ThreadLocal
2024-09-02 05:17:47
前言
多线程访问同一个共享变量的时候也别容易出现并发问题,特别是在多线程需要对一个共享变量进行写入的时候。为了保证线程的安全,一般使用者在访问共享变量的时候需要进行适当的同步。如下图所示
同步的措施一般是加锁,但是加锁显然加重了使用者的负担。那么有没有一种方式可以做到,当创建一个线程过后,每个线程对其访问的时候,访问的是自己线程的变量呢?其实ThreadLocal就可以做出这样一件事。
ThreadLocal
ThreadLocal是JDK提供的,它提供了线程本地变量,也就是说如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地副本。当多个线程操作这个变量的时候,实际上操作的是自己本地内存里面的变量,从而避免了线程安全问题。创建一个ThreadLocal变量后,每个线程都会复制一个变量到自己的本地内存,如下图所示:
ThreadLocal测试
代码如下:
public class ThreadLocalTest {
static void print(String str){
System.out.println(str+":"+localVariable.get());
localVariable.remove();
}
static ThreadLocal<String> localVariable=new ThreadLocal<String>();
public static void main(String[] args) throws Exception{
Thread threadone=new Thread(() -> {
localVariable.set("threadone local variable");
print("threadone");
System.out.println("threadone remove after"+":"+localVariable.get());
});
Thread threadtwo=new Thread(() -> {
localVariable.set("threadtwo local variable");
print("threadtwo");
System.out.println("threadtwo remove after"+":"+localVariable.get());
});
threadone.start();
threadtwo.start();
}
}
结果:
ThreadLocal类结构
最新文章
- storm入门(二):关于storm中某一段时间内topN的计算入门
- iOS 阶段学习第十天笔记(结构体)
- August 11th 2016, Week 33rd Thursday
- C# 分支语句
- UNIX环境高级编程--高级I/O(三)
- ZF-关于海南的增删改需求
- 解决新电脑的系统安装问题:针对BIOS的UEFI模式
- Tomcat 配置文件 server.xml
- keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore
- 通过junit写unit test
- NDK时间测量
- _itemmod_day_limit
- Oracle的卸载过程步骤
- oracle数据库rman异地恢复
- 模拟C#的事件添加和删除
- Runtime - Associated Objects (关联对象) 的实现原理
- tensorflow serving 打印调试log
- 【C#】获取泛型<;T>;的真实类型
- Spring事务处理时自我调用的解决方案 嵌套AOP
- python3 实现一个多级菜单小功能
热门文章
- 2019牛客暑期多校训练营(第二场)A	Eddy Walker(打表求概率)
- Codeforces Round #675 (Div. 2)【ABCD】
- AtCoder Beginner Contest 174
- Educational Codeforces Round 43
- 2013-2014 ACM-ICPC, NEERC, Eastern Subregional Contest PART (8/10)
- 【noi 2.6_9281】技能树(DP)
- AtCoder Beginner Contest 184 E - Third Avenue (BFS)
- Windows Terminal 更换主题
- 02、scrapy安装
- Shell 函数 &; 数组