前言

多线程访问同一个共享变量的时候也别容易出现并发问题,特别是在多线程需要对一个共享变量进行写入的时候。为了保证线程的安全,一般使用者在访问共享变量的时候需要进行适当的同步。如下图所示

同步的措施一般是加锁,但是加锁显然加重了使用者的负担。那么有没有一种方式可以做到,当创建一个线程过后,每个线程对其访问的时候,访问的是自己线程的变量呢?其实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类结构

最新文章

  1. storm入门(二):关于storm中某一段时间内topN的计算入门
  2. iOS 阶段学习第十天笔记(结构体)
  3. August 11th 2016, Week 33rd Thursday
  4. C# 分支语句
  5. UNIX环境高级编程--高级I/O(三)
  6. ZF-关于海南的增删改需求
  7. 解决新电脑的系统安装问题:针对BIOS的UEFI模式
  8. Tomcat 配置文件 server.xml
  9. keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore
  10. 通过junit写unit test
  11. NDK时间测量
  12. _itemmod_day_limit
  13. Oracle的卸载过程步骤
  14. oracle数据库rman异地恢复
  15. 模拟C#的事件添加和删除
  16. Runtime - Associated Objects (关联对象) 的实现原理
  17. tensorflow serving 打印调试log
  18. 【C#】获取泛型&lt;T&gt;的真实类型
  19. Spring事务处理时自我调用的解决方案 嵌套AOP
  20. python3 实现一个多级菜单小功能

热门文章

  1. 2019牛客暑期多校训练营(第二场)A Eddy Walker(打表求概率)
  2. Codeforces Round #675 (Div. 2)【ABCD】
  3. AtCoder Beginner Contest 174
  4. Educational Codeforces Round 43
  5. 2013-2014 ACM-ICPC, NEERC, Eastern Subregional Contest PART (8/10)
  6. 【noi 2.6_9281】技能树(DP)
  7. AtCoder Beginner Contest 184 E - Third Avenue (BFS)
  8. Windows Terminal 更换主题
  9. 02、scrapy安装
  10. Shell 函数 &amp; 数组