🏅作者小三是刚刚毕业不久全栈工程师,写的技术文章基本上是学习过程中笔记整理而来,大家看了之后如果喜欢可以给小弟点点赞哦。
🏅例外小弟还有个程序员交流群,欢迎各位大佬来摸鱼哈。点击加群
什么是ThreadLocal
ThreadLocal又叫做线程局部变量,全称thread local variable,它的使用场合主要是为了解决多线程中因为数据并发产生不一致的问题。ThreadLocal为每一个线程都提供了变量的副本,使得每一个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享,这样的结果无非是耗费了内存,也大大减少了线程同步所带来的性能消耗,也减少了线程并发控制的复杂度。
总的来说:ThreadLocal适用于每一个线程需要自己独立实例,而且实例的话需要在多个方法里被使用到,也就是变量在线程之间是隔离的但是在方法或者是类里面是共享的场景
那ThreadLocal和Synchronized又有什么区别呢?
虽然ThreadLocal和Synchonized都用于解决多线程的并发访问,但是它们之间还是会有一些本质上的区别的:
Synchronized是利用锁的机制,使得变量或者是代码块在某一时刻里只能被一个线程来进行访问。ThreadLocal是为每一个线程都提供了一个变量的副本,这样就是的每一个线程在某一时刻里访问到的不是同一个对象,这样就隔离了多个线程对数据的数据共享,Synochronized正好相反,可以用于多个线程之间通信能够获得数据共享。
注:ThreadLocal不可以使用原子类型,只能使用Object类型