关于ThreadLocal,网上已经有很多文章讲的也是很清楚了,至于应用场景,大多也就是使用demo的方式进行了讲解,达不到让人印象深刻的目的。虽然以前也多次遇到过别人讨论这个东西,大多是面试场景吧,只是直至目前,我也几乎没有在工作中用到过(做开发这么久了,没用过这个,实属汗颜啊),根据理解,用我自己的话把ThreadLocal来描述一遍,以此记录。
ThreadLocal,是线程本地变量,ThreadLocal为多线程编程提供了一个另一个思路,不用锁,不用共享变量等特点。它的实现思路是在每个线程中存放一个变量的map,这个map用于存放属于线程的变量,这个map的使用就是由ThreadLocal来管理。ThreadLocal有三个方法,get,set,remove,分别是获取变量,设置变量,移除变量。还有一个初始化方法,是给继承类用的。
对于它的应用场景,按上面的思路来说,就是某个变量是希望在多线程下使用,但又是可以允许不同线程之间互不影响的情况(按线程多例,每个线程一个实例)。比如在spring的web工程体系中,从接收到用户的一个请求到service到dao层都是同一个线程在为其服务,每个线程持有一个数据库连接的实例,这样对于每一个实例来说,都不存在线程安全的问题了
若以后有机会实际用到的时候,再来补充场景。
0 comments:
Post a Comment