客官!上车,坐稳了,出发!!!
事情的经过是这样的:
时光回溯到2022年的某个夜深人静的夜晚,在一个小巷子里,一个长发飘飘,身着红裙的美女轰然倒地。作为红十字会的一员,紧急心脏复苏还是手拿把掐的。
‘妹子心脏停止跳动’,‘周边环境安全’,‘解开衣扣’,‘双手按压胸口1,2,3…30 31,草,多按一下…’,‘清理口腔异物’,‘人工呼吸’… 。
不知过了多久,终于,妹子心脏开始跳动!!!
我如释重负的喊了句,‘患者恢复心跳,等待救援’,起身就要走,但我的脚不知被什么东西紧紧攥着,低头一看,原来是妹子的玉手,‘妹子,你放心,你已经没事了’,我安慰道。‘你为什么要救我’,妹子埋怨着。‘年纪轻轻的,有什么坎过不去呢…’,‘…’,开导了很久,终于妹子开口了,‘我活着有什么用,我不懂Threadlocal,我不懂!’,‘我教你啊,给我一分钟时间,肯定把你教会’,‘我不信,我学它很久了,就是一直搞不清,如果你能教会我,我以身相许。如果我还是不会,那你就不要救我了’。
突然,我意识到了问题的严重性,整理了一下思路,开始了下面的对话 ...
‘你知道它有什么作用吗?’
妹子答道 ‘应该是为了方便上下文传参,方法中不用加入参,就可以取到想要的内容’
‘那让你去实现这个功能,你如何做?’
妹子想了想,答道‘在Thread类里冗余一个变量,让开发者自己去管理,就好了’
‘说到点上了,那这个变量是什么类型的比较好呢?’
妹子说 ‘一个object类型就行’
‘那假如想存多个值呢?’
妹子说 ‘那就使用map吧,干净又卫生’
于是乎,就有了下面的代码
‘那map里的key,如何定义?让开发者自己定义也行,但不优雅。还有别的好办法吗?’
听到这个问题,妹子恍然大悟 ‘原来Threadlocal的作用在这里,为了方便生成map里的key?’
‘嗯呢,你真聪明。Threadlocal里有个内部类Threadlocalmap,这个map就是Thread类里面冗余的变量,而key,就是Threadlocal本身’
继续看源码
妹子开心的说‘哇,原来这么简单!谢谢你啊小哥哥,我以后就是你的人了’
‘我一阵无语’
妹子又问‘那这个有什么性能问题吗’
我看了看时间,已经凌晨十二点,‘这里有点冷,你先起来。我们换个地方继续深入讨论这个问题吧’
妹子连连点头…
以下内容付费观看。
凡事要知其然知其所以然,Java也遵循因果循环。当以旁观者的身份去学一门技术时,往往无法了解作者的真实意图。
这时,不妨站在作者Doug Lea的角度去思考,往往会有更好的效果,并让你印象深刻,醍醐灌顶!!!
(地铁码字不宜,欢迎点赞投币。欢迎关注,后面会更精彩!)