ThreadLocal学习
2019独角兽企业重金招聘Python工程师标准>>>
ThreadLocal 其实应该叫做ThreadLocalVariable。即线程局部变量。
程序中的变量在多线程情况下,是由多个线程共享的,这样很容易出现问题。例如,若多个线程共享数据库连接,线程1将线程2的数据库连接关闭,则线程2在使用数据库连接时就会抛出异常。
若是每个线程都能够有自己的单独的变量,就不会再担心出现这样的问题了。这就是ThreadLocal要做的事。
ThreadLocal为每一个线程提供了一个独立的变量副本,每一个线程都可以独立的改变自己的副本而不会影响其他线程的副本。
ThreadLocal实现原理
在ThreadLocal内部有一个Map,用于存储每一个线程的变量副本。Map中元素的键为线程对象,值为线程对象的变量副本。
自己实现一下ThreadLocal:
public class ThreadLocal<T> {
private Map<Thread, T> container = Collections.synchronizedMap(new HashMap<Thread, T>());
public void set(T value){
container.put(Thread.currentThread(), value);
}
public T get(){
Thread thread = Thread.currentThread();
T value = container.get(thread);
if(value == null && !container.containsKey(thread)){
value = initialValue();
container.put(thread, value);
}
return value;
}
public void remove(){
container.remove(Thread.currentThread());
}
protected T initialValue(){
return null;
}
}
ThreadLocal和线程同步机制的比较
相同点:都是为了解决多线程下变量的访问冲突问题。
不同点:在线程同步机制中,通过对象的锁机制来确保同一时间只有一个线程来访问此变量。该变量是由多个线程共享的。而ThreadLocal则是为每一个线程提供一个独立的变量副本,从而也没必要对此变量进行同步了。同步机制采用“以时间换空间”的方法,让每个线程排队等待;而ThreadLocal则采取了“以空间换时间”的方法,为每一个线程提供了独立副本。
ThreadLocal比同步机制更方便,具有更高的并发性。
转载于:https://my.oschina.net/u/2518655/blog/625277
ThreadLocal学习相关推荐
- Threadlocal学习及内存泄漏原因和解决方案
因为 ThreadLocal 是基于 ThreadLocalMap 实现的,其中 ThreadLocalMap 的 Entry 继承了 WeakReference ,而 Entry 对象中的 key ...
- ThreadLocal学习笔记
关于什么是ThreadLocal以及他的用处 我理解的ThreaLocal就是内存中有一个变量,每个线程都要拿过来这个变量,但是他们自己去操作自己拿到的那一份变量,这些变量都是一个东西,但是在不同的线 ...
- java基础技能清单
一.java基础 1.java集合框架学习,数据基本类型学习,Integer缓存等问题,常见面试题.对ArrayList和Collecttion.binarySerch()源码进行学习.DelayQu ...
- estore简版商城疑点思考
estore简版商城疑点思考 一.疑点 1.疑点一:[解决] 读取 web应用中的 资源 文件 解答: 本人博文:javaweb读取 web 应用中的资源文件 http://blog.csdn.ne ...
- js设置ajax执行顺序,ajax同步处理(使得JS按顺序执行)
在项目中碰到一个问题: 图一: 图二: 函数1代码:这里是因为有ajax请求,默认的是异步的 //点击分页页码,请求后台返回对应页码的数据 function getdata(fewPage,flag, ...
- JDK7 源码学习系列——ThreadLocal
为什么80%的码农都做不了架构师?>>> 学习JDK中的类,首先看下JDK API对此类的描述,描述如下: 该类提供了线程局部 (thread-local) 变量.这些变量不同 ...
- Java多线程学习三十:ThreadLocal 适合用在哪些实际生产的场景中
我们在学习一个工具之前,首先应该知道这个工具的作用,能带来哪些好处,而不是一上来就闷头进入工具的 API.用法等,否则就算我们把某个工具的用法学会了,也不知道应该在什么场景下使用.所以,我们先来看看究 ...
- java学习记录--ThreadLocal使用案例
本文借由并发环境下使用线程不安全的SimpleDateFormat优化案例,帮助大家理解ThreadLocal. 最近整理公司项目,发现不少写的比较糟糕的地方,比如下面这个: public class ...
- ThreadLocal的学习
ThreadLocal介绍 ThreadLocal,顾名思义,线程局部变量.对于同一个static ThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的 ...
最新文章
- python 监控windows磁盘空间和备份大小
- mysql while 游标_mysql 游标 loop while 的使用
- Mobile 拨打电话 发送短信
- 网络摄像头 登录绕过 RCE漏洞 数据分析报告
- 基于SEAL库实现PSI-报错实录1
- python画图颜色表示大小变化_python画图(线条颜色、大小、类型:点、虚线等)(图文详细入门教程四)...
- python入门指南阅读答案_【python】入门指南1
- java thread 输出结果_大神来看看这段程序输出结果是什么?
- Oracle 抢人了!近 4000 万年薪只为一个 AI 专家
- android重写view和viewgroup的区别
- 遇到数学问题《深度学习》“花书”读不下去了吗?给你支个招
- 【LeetCode - 317】离建筑物最近的距离
- latex脚注标号混合数字和特殊字符
- 用计算机打一闪一闪亮晶晶,一闪一闪亮晶晶 我去!RGB轴机械键盘灯光玩法亮瞎人...
- 高德地图基于阿里云MaxCompute的最佳实践
- python生成单位矩阵_python 实现一个反向单位矩阵示例
- 异常检测|深度学习(李宏毅)(二十一)
- 感觉心上有一阵秋风吹过
- Java语言规格说明
- js中的 this指向面试题
热门文章
- python 获取本地视频信息_python获取视频文件信息
- 微型计算机没什么总线,微型计算机系统总线包括什么?
- 2019-0403视觉SLAM的学习第二讲
- 理解JSP页面中<%!%>与<%%>与<%=%>及out.write()
- 如何选择合适的加密芯片
- 是做生意还是做事业,这是一个问题。
- 干货整理!10个Python图像处理工具,入门必看,提效大法 | 资源
- 老黄投下新核弹:英伟达十年力作图灵架构,新GPU支持光线追踪
- 18岁华裔准博士生,“杀死了”量子计算大进展
- 半自动驾驶大对决:特斯拉和凯迪拉克谁是真王