大家好,我叫大鸡腿,大家可以关注下我,会持续更新技术文章还有人生感悟,感谢~

在掘金关注我的读者,可能不知道我之前是在csdn博客写了5年的博客专家,默默无闻的写了500多篇文章,当然有些是在前期学技术的时候写的,主要是总结技术还有学习的心得。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X6xZfay2-1656949245583)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8a726591ed874142b70b73f92f151a52~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/07/05/084328263.png)
直到今天看了一篇文章的评论,我才发现我被TransmittableThreadLocal框架作者评论了,然后自己浑然不知道,OMG~
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Wwmmdii-1656949245584)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ea4344fe47ef4c45a618545e287bf36a~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/07/05/084328693.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JPILBGBI-1656949245584)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7f69754ff42046c4bf8cb0fd99e85b0a~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/07/05/084329214.png)
贼开心,今天忍不住再去看下源码,因为一直以来,TransmittableThreadLocal对线程池支持是不好的,因为它需要我们自己通过TtlExecutors.getTtlExecutorService(executorService);创建线程池,那么对于中间件已经有的线程池,我们需要去重写~
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MLYYmMEF-1656949245585)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6fbf38d5f1a44dafab914603b8a88a93~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/07/05/084329645.png)
我们来看下官网的时序图,runnable被包裹在TtlRunnable类,改写了ThreadPool beforeExecute方法,将线程变量在执行完之后重新塞回线程。
AbstractExecutorTtlTransformlet
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jWanKQ6p-1656949245585)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c9b5c865bd9b42ae9bb4e7e83a48ba8e~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/07/05/084330282.png)
执行的runnable改成自己封装的类,在执行过程中,获取本地线程变量,拿到的是之前的。
在github里头,有个issue提到,-agent会跟skywalk的字节码冲突,然后需要将这个agent放前面。
能被开源框架作者评论有点受宠若惊,希望自己以后的博客多用心,可以得到更多读者的支持,感谢~