JAVA线程之二----ThreadLocal

本文详细探讨了ThreadLocal的作用域变量概念,对比了它与static的区别,并阐述了ThreadLocal与同步机制(Synchronized)的关系。通过具体实例展示了ThreadLocal在多线程系统中的应用,特别强调了其在JDBC中的典型用法,以及如何利用ThreadLocal来实现资源的高效共享与隔离。
线程作用域变量-ThreadLocal 
前面我们讲到,Synchornized 可以保证多个线程之间的通讯。那么在多线程系统中要求每个线程都有自己的全局变量的时候,
使用ThreadLocal 就是一个最佳选择。


ThreadLocal 用于实现单线程内的数据共享,即在同一个线程中运行多个模块并且它们要共享一份数据,而在另一个线程中又共享另一份数据。
比较典型的例子就是,JDBC中的Collection ,当由用户发起一个线程,在这个线程中将执行多个方法,比如增,删,改,查,而这些操作必须在一个事物里完成,
那么就可以使用 ThreadLocal 来限制Collection.保证Collection/Trasaction的唯一性。


ThreadLocal跟static 的区别
既然ThreadLocal 也是全局变量,是不是可以用 static 呢?那么,我们首先回顾一下static 的定义,static 修饰的变量在JVM 只有一份,
它是实现单个线程多个模块共享,但是也实现了多个线程共享,作用域太大了,不满足业务需求。


与同步机制(Synchronized)的关系
ThreadLocal和Synchronized  都是用来解决并发问题的。
对于多线程共享的问题,Synchronized采取”时间换空间“,ThreadLocal采取空间换时间,因为ThreadLocal为每个线程提供了变量的副本,如上面提到的Connection,
每当用户发起一个线程,那么这个线程就拥有一个Connection的副本。
不过ThreadLocal不能替代Synchronized,他们被用来解决不同的问题,ThreadLocal 考虑的是不同线程之间资源的隔离,Synchronized 提供了线程之间通信的桥梁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值