Java编程 当前位置:首页 > 计算机学习 > 编程开发 > Java编程>正文

ThreadLocal浅解

【Java编程】 2017-07-18本文已影响
如果有看到spring的一些源码的同学都知道,ThreadLocal对象在spring几乎在每一个重要的类的都存在其身影。到底ThreadLocal是有什么用的呢,让我们来揭开其面纱吧。 WoN秒教学习网-学习教育资源分享平台
WoN秒教学习网-学习教育资源分享平台
假如某一个对象是非线程安全的,在多线程的环境下,对对象的访问则须采用synchronized或lock/unlock进行线程同步,采用这样的方法限制了并发的访问,会带来比较大的性能损失.当然,我们可以在无须同步的的情况下,来化解线程安全的问题---就是采用ThreadLocal. WoN秒教学习网-学习教育资源分享平台
WoN秒教学习网-学习教育资源分享平台
其实可以把ThreadLocal看成一个线程的局部变量,我们可以通过ThreadLocal为每一个线程提供了单独的副本. WoN秒教学习网-学习教育资源分享平台
WoN秒教学习网-学习教育资源分享平台
ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突.因为每一个线程都拥胡自己的变量副本,从而也就没有必要对该变量进行同步了. WoN秒教学习网-学习教育资源分享平台
WoN秒教学习网-学习教育资源分享平台
ThreadLocal提供了线程安全的共享对象,在编写多线程代码的时候,可以把不安全的变量封装进ThreadLocal. WoN秒教学习网-学习教育资源分享平台
WoN秒教学习网-学习教育资源分享平台
其实从另一个角度上看,对于多线程的资源共享的问题,同步机制采用了"以时间换空间"的方式,而ThreadLocal则采用了"以空间换时间"的方式。[注:这一句话来自 向同事借看的<<精通spring2.x企业开发详解>>一书第九章] WoN秒教学习网-学习教育资源分享平台
WoN秒教学习网-学习教育资源分享平台
举一个例子,先说明一下各类的用途如下: WoN秒教学习网-学习教育资源分享平台
Log类是用来将程序的log记录存放在log.txt里面的,进行分配线程的工作 WoN秒教学习网-学习教育资源分享平台
TSLog产生Log的类,实例由每个线程所拥有 WoN秒教学习网-学习教育资源分享平台
ClientThread调用Log的线程 WoN秒教学习网-学习教育资源分享平台
WoN秒教学习网-学习教育资源分享平台
首先来看看Log类的写法: WoN秒教学习网-学习教育资源分享平台
Java代码
看过本文的人还看了

本站所有资源均来自于秒教学习网蜘蛛爬取结果,如您发现侵权、违法、存在不和谐内容,告知本站一律删除

本站不以盈利为目的,全站资源仅供学习爱好使用。本站站长邮箱:3569622@qq.com

备案号:

©秒教学习网  2016-2019版权所有     站点地图

回到顶部