1.软文推荐

2.软文推荐

3.软文推荐

多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线程访问出现线程不安全的方法,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的都是线程自己的变量这样就不会存在线程不安全问题。

ThreadLocal是JDK包提供的,它提供线程本地变量,如果创建一乐ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个副本,在实际多线程操作的时候,操作的是自己本地内存中的变量,从而规避了线程安全问题。

用法

多个线程在调用同一个方法的时候,会有并发问题,解决这种问题最简单的办法就是将数据保存在Thread的自己的结构中,也就是ThreadLocal的作用了。用法如下:

classJavaBean{staticThreadLocal threadLocal =newThreadLocal();publicvoid prepare(){
       threadLocal.set(0);}publicvoid work(){for(int i =0; i run(){
       bean.prepare();
       bean.work();}}publicclassThreadLocalDemo{publicstaticvoid main(String[] args){JavaBean bean =newJavaBean();for(int i =0; i 

从输出中可以看到,多个线程操作同一个threadLocal时,结果并不会出错。

可以将ThreadLocal看做是对Thread.threadLocals的封装,况且在程序中也是不能直接访问到Thread.threadLocals。

原理

下面简单看ThreadLocal的原理,在Thread中保存了一个Map,类型可以认为是Map,其中T是要保存数据的类型。当要从中取出数据时,调用的流程如下:

Thread.currentThread().threadLocals.getEntry(threadLocal).value

这样,不同的线程在执行的时候在同一个threadLocal上获取到的是不同的数据,线程之间的隔离性是通过”各自保存不同的Map”来实现的,而看到的threadLocal对象其实是KEY,在操作前get到的是VALUE。其实自己动手做一个线程安全的数据保存的解决方法也是这个思路。

在ThreadLocalMap中使用的并不是普通的引用保存数据,而是使用WeakReference来做:

staticclassEntryextendsWeakReference{Object value;Entry(ThreadLocal k,Object v){super(k);
       value = v;}}

这样如果ThreadLocal被释放了,那么ThreadLocalMap中的Entry也会被释放,不至于造成内存泄露。

本文来源:www.lxlinux.net/8552.html,若引用不当,请联系修改。

相关文章 8

1

大连网站建设找哪家(大连网站建设推广) 3分钟前

合优网络成立至今已有14年,一直秉承着"诚信、责任、团队、敬业"的服务宗旨,成立至今获得了5万多家企业的认同并建立起长期合作的伙伴...

2

腾讯云:2核/2G/4Mbps/国内轻量/季付30元,买云服务器送免费机器,最长免费续3个月 5分钟前

腾讯云的618活动已经下架,不过新的促销活动已经开始在做了,本次除了新用户购买优惠除外,还增加了购买即赠(送3个月续费时长)和秒...

3

LOCVPS:新上澳洲悉尼机房,1核/1G/30G SSD/400G/100Mbps/月付29.6元 7分钟前

LOCVPS家上新了,本次商家上线了澳洲悉尼机房,这个机房线路采用BGP国际线路,联通走CU2直连线路,网络非常不错,电信走163普通线路,目...

4

搬瓦工只能年付吗?能不能按月付款?能不能一次性多买几年?(搬瓦工月付) 7分钟前

搬瓦工只能年付吗?能不能按月付款? 搬瓦工购买的时候能不能年付,或者说只能年付吗,能不能月付,能不能一次性多买几年,比如买它...

5

Database Mart:更新黑五优惠信息,新的报价下调,增加Windows Hyper-V主机和GPU服务器优惠 10分钟前

双十一还在进行中,但是国外的黑五大促即将来临,通常很多不是专注中国市场的商家都不会发布双11优惠,因此黑五就是一个最为重大的购...

6

X-ZoneServers:罗马尼亚大带宽vps,1核/2GB/20GB SSD/5Gbps不限流量,6.5/月起 13分钟前

X-ZoneServers怎么样,X-ZoneServers,国外商家,似乎新成立,数据中心好像是罗马尼亚,主要提供KVM VPS,特色是5Gbps端口、不限流量,免费L3/4 ...

7

http和https的区别是什么? 14分钟前

http协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。 https协议是由SSL+HTTP协议构建的可进行加密传...

8

河北便宜简单的模板网站的网站公司(河北省哪里车最便宜) 16分钟前

广州合优网络科技有限公司 成立于2007年,百度深圳公司网站建设供应商,广东省高新技术企业,获30余项技术专利,连续多年守合同重信用...