其他
大家好,我是不才陈某~前面在介绍分布式链路追踪时讲过异步调用会丢失链路信息,最终的解决方案是使用对应的包装类重新包装一下,如下:RunnableWrapperCallableWrapperSupplierWrapper还有openFeign异步请求丢失上文的问题,这些问题追根究底都是ThreadLocal惹得祸。由于ThreadLocal只能保存当前线程的信息,不能实现父子线程的继承。说到这,很多人想到了InheritableThreadLocal,确实InheritableThreadLocal能够实现父子线程间传递本地变量,但是.....但是你的程序如果采用线程池,则存在着线程复用的情况,这时就不一定能够实现父子线程间传递了,因为在线程在线程池中的存在不是每次使用都会进行创建,InheritableThreadlocal是在线程初始化时intertableThreadLocals=true才会进行拷贝传递。所以若本次使用的子线程是已经被池化的线程,从线程池中取出线下进行使用,是没有经过初始化的过程,也就不会进行父子线程的本地变量拷贝。由于在日常应用场景中,绝大多数都是会采用线程池的方式进行资源的有效管理。今天就来聊一聊阿里的ThansmittableThreadLocal是如何解决线程池中父子线程本地变量传递。B站链接:https://b23.tv/RI06iZl下方是本篇文章视频教程,讲解更加详细!“帅气的人都点赞了~”InheritableThreadLocal