Closed songxiaosheng closed 1 year ago
TTL
直接提供了「关闭线程池中线程
的inheritable
能力」的功能: @songxiaosheng
getDisableInheritableThreadFactory()
。
不是关闭所有
线程的inheritable
能力。
(当然也可实现,见TransmittableThreadLocal
的javadoc
)
非线程池中线程,inheritable
能力在业务使用中应该是必要的。
感谢大佬回复,这个inheritable能力存在时候,主线程使用了ttl的threadlocal时 大量的框架层线程触发的时候也会频繁的触发childValue方法产生大量的垃圾对象,并且拷贝到子线程的数据并不会清理风险较高
是否考虑后续new Thread场景 通过agent方式修改Runnable类型为TtlRunnable类型
有必要关闭Inheritable能力么
由你应用场景、需求决定。 @songxiaosheng
TTL
提供了关闭Inheritable
的一些方法,具体参见TransmitableThreadLocal
的JavaDoc。
如果Inheritable
的「泄露」有实际影响,则做关闭操作,当然会有功能上的影响。
是否考虑后续new Thread场景 通过agent方式修改Runnable类型为TtlRunnable类型
看起来没有必要。
TTL
提供了关闭Inheritable
的一些方法,具体参见TransmitableThreadLocal
的JavaDoc。
多线程场景存在new Thread的场景,对于这种场景如果关闭Inheritable能力意味着,无法传递数据 ,当前版本的agent并有去处理这种场景,如果不关闭的话所有子线程(包含框架内部的很多线程都会触发clone方法进行无意义的clone), 如果关闭了Inheritable能力该如何在new Thread场景下自动传递,而无需改动现有代码 https://github.com/alibaba/transmittable-thread-local/issues/100 这个Issue中解释了 为什么要做关闭Inheritable能力的原因