转载本文请联系三太子敖丙公众号。开场白张三最近因为天气太热心情不太好,决定出去面试,和面试官聊天解决一下。结果刚投完简历就有人约了面试。我输了,为什么刚投稿就有人约我面试?嘿。..烦什么,我哥这么久没上过江湖,江湖上还有他的传说,我还这么受追捧吗?太麻烦了,又帅又无辜。暗喜的张三来到了现场面试的办公室。我失去了它。这位面试官?没办法,这台Mac到处都是划痕。这卷是传说中的建筑师吗?张三心态崩了,出来后第一个面试就遇到了顶级面试官。谁受得了。你好,我是你的面试官托尼,你看我的发型应该能猜出我的身份,我什么都不说,直接开始吧?看你的简历是多线程的,来找我聊聊ThreadLocal吧。好久没写代码了,不熟悉。请帮我回忆一下。我失去了它?这个TM是人类语言吗?这是什么逻辑?据说问问多线程然后搞出这么冷门的ThreadLocal?心态崩了,再说了,你TM都忘了,你会读书吗?来吧,我到底在这找什么答案……虽然很不情愿,但张三还是高速转动着小脑袋,回忆着ThreadLocal的细节……面试官实话实说,我用的是ThreadLocal在实际开发过程中没有太多地方。写这篇文章的时候,特意在电脑上打开了几十个项目,然后全局搜索ThreadLocal。我发现除了系统源码的使用,在项目中很少用到,但还是有的。ThreadLocal的作用主要是数据隔离。填充的数据只属于当前线程,可变数据与其他线程相对隔离。在多线程环境下,如何防止自己的变量被其他线程篡改。能不能说说它的隔离有什么用,会用在什么场景下?这个,我已经说了,我很少用,你再问我,我就觉得不舒服,哦哦哦,我记住了,业务隔离级别。面试官你好,其实我首先想到的是Spring实现事务隔离级别的源码。这是我在大学被女朋友甩了,一个人在图书馆哭的时候无意中发现的。Spring采用Threadlocal的方式来保证单个线程中的数据库操作使用同一个数据库连接。同时,这种方式允许业务层在不感知和管理连接对象的情况下使用事务。通过传播层,可以巧妙地管理多个事务配置之间的切换,挂起和恢复。Spring框架使用ThreadLocal来实现这种隔离,主要是在TransactionSynchronizationManager类中。代码如下:privatestaticfinalLoglogger=LogFactory.getLog(TransactionSynchronizationManager.class);privatestaticfinalThreadLocal