以前都只知道他保存了当前线程变量的一个副本,却不知道他到底能干啥,而且说这个保存了当前线程的副本也是很抽象的,怎么理解这玩意。
下面老哥带你进入Threadlocal。
Threadlocal能干啥?
你可以吧Threadlocal想象成一个redis,Threallocal里面维护了一个叫做ThreadlocalMap的变量,使用key,value存储,重点来了。
比如我们有多个线程需要去操作一个变量,要求他们操作要互不影响,这个使用我们会怎么办,我们将thread当做key存放在redis里面,那个变量存在value里面对不对? <thread , value> 。
巧了这不是,Threadlocal也是这样干的。它里面那个threadlocalmap就是使用thread当做key,目的区别不同的线程。
当有一个线程过来,我们就去里面通过当前线程获取那个value。 然后对他进行操作。
综上所述: 我们会发现Threadlocal也是线程安全的,为什么? 因为每一个线程都去操作自己的key ,就不存在并发操作了,对不对。
应用场景,多线程的地方: 比如数据库连接管理,session管理。都可以使用到这个数据。