ThreadLocal详解
Posted slivelove
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThreadLocal详解相关的知识,希望对你有一定的参考价值。
ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不同的变量值完成操作的场景。
或者也可以这么理解:ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问, 通常是类中的 private static 字段,是对该字段初始值的一个拷贝,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。
二、ThreadLocal的作用
我们知道有时候一个对象的变量会被多个线程所访问,这时就会有线程安全问题,当然我们可以使用synchorinized 关键字来为此变量加锁,进行同步处理,从而限制只能有一个线程来使用此变量,但是加锁会大大影响程序执行效率,此外我们还可以使用ThreadLocal来解决对某一个变量的访问冲突问题。当使用ThreadLocal维护变量的时候 为每一个使用该变量的线程提供一个独立的变量副本,即每个线程内部都会有一个该变量,这样同时多个线程访问该变量并不会彼此相互影响,因此他们使用的都是自己从内存中拷贝过来的变量的副本, 这样就不存在线程安全问题,也不会影响程序的执行性能。
注意:虽然ThreadLocal能够解决上面说的问题,但是由于在每个线程中都创建了副本,所以要考虑它对资源的消耗,比如内存的占用会比不使用ThreadLocal要大。
三、ThreadLocal的方法使用
-
-
set()方法用于保存当前线程的副本变量值。
-
initialValue()为当前线程初始副本变量值。
-
remove()方法移除当前前程的副本变量值。
参考资料
1、https://blog.csdn.net/woshiluoye9/article/details/72544764
2、https://www.cnblogs.com/dolphin0520/p/3920407.html
以上是关于ThreadLocal详解的主要内容,如果未能解决你的问题,请参考以下文章
深入浅出多线程编程实战ThreadLocal详解(介绍使用原理应用场景)