线程局部存储TLS(thread local storage)

TLS技术:

     同一全局变量或者静态变量每个线程访问的是同一变量,多个线程同时访存同一全局变量或者静态变量时会导致冲突,尤其是多个线程同时需要修改这一变量时。
通过TLS机制,为每一个使用该全局变量的线程都提供一个变量值的副本,每一个线程均可以独立地改变自己的副本,而不会和其它线程的副本冲突。

1.解决多线程中的对同一变量的访问冲突的一种技术;

2.TLS会为每一个线程维护一个和该线程绑定的变量的副本;

3.Java平台的java.lang.ThreadLocal是TLS技术的一种实现;


ThreadLocal:

ThreadLocal存放的值是线程封闭,线程间互斥;

ThreadLocal是采用哈希表的方式来为每个线程都提供一个变量的副本;
主要用于线程内共享一些数据,避免通过参数来传递;

ThreadLocal保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏;
Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离;

ThreadLocal与Thread,Runnable没有啥关系


ThreadLocal的使用场景:

 数据库连接:在多线程中,如果使用懒汉式的单例模式创建Connection对象,由于该对象是共享的,那么必须要使用同步方法保证线程安全,这样当一个线程在连接数据库时,那么另外一个线程只能等待。这样就造成性能降低。如果改为哪里要连接数据库就来进行连接,那么就会频繁的对数据库进行连接,性能还是不高。这时使用ThreadLocal就可以既可以保证线程安全又可以让性能不会太低。但是ThreadLocal的缺点时占用了较多的空间。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值