做催收的网站,怎么做网站可以注册的,买产品做企业网站还是博客,wordpress下载面板插件有了InheritableThreadLocal为啥还需要TransmittableThreadLocal#xff1f; 典型回答 InheritableThreadLocal是用于主子线程之间参数传递的#xff0c;但是#xff0c;这种方式有一个问题#xff0c;那就是必须要是在主线程中手动创建的子线程才可以#xff0c;而现在池…有了InheritableThreadLocal为啥还需要TransmittableThreadLocal 典型回答 InheritableThreadLocal是用于主子线程之间参数传递的但是这种方式有一个问题那就是必须要是在主线程中手动创建的子线程才可以而现在池化技术非常普遍了很多时候线程都是通过线程池进行创建和复用的这时候InheritableThreadLocal就不行了。 TransmittableThreadLocal是阿里开源的一个方案 开源地址 这个类继承并加强InheritableThreadLocal类。用来实现线程之间的参数传递一经常被用在以下场景中 1 分布式跟踪系统 或 全链路压测即链路打标 2 日志收集记录系统上下文 3 Session级Cache 4 应用容器或上层框架跨应用代码给下层SDK传递信息
使用方式
先需要导入依赖
dependency groupIdcom.alibaba/groupId artifactIdtransmittable-thread-local/artifactIdversion2.14.2/version
/dependency对于简单的父子线程之间参数传递可以用以下方式
TransmittableThreadLocalString context new TransmittableThreadLocal();
// 在父线程中设置
context.set(value-set-in-parent);
// 在子线程中可以读取值是value-set-in-parent
String value context.get();如果在线程池中可以用如下方式使用
TransmittableThreadLocalString context new TransmittableThreadLocal(); // 在父线程中设置
context.set(value-set-in-parent);
Runnable task new RunnableTask();// 额外的处理生成修饰了的对象
ttlRunnable Runnable ttlRunnable TtlRunnable.get(task);
executorService.submit(ttlRunnable);// Task中可以读取值是value-set-in-parent
String value context.get();除了RunnableCallable也支持
TransmittableThreadLocalString context new TransmittableThreadLocal();
// 在父线程中设置 context.set(value-set-in-parent);
Callable call new CallableTask();
// 额外的处理生成修饰了的对象
ttlCallable Callable ttlCallable TtlCallable.get(call);
executorService.submit(ttlCallable);
// Call中可以读取值是value-set-in-parent也可以直接用在线程池上而不是Runnable和Callable上
ExecutorService executorService ...
// 额外的处理生成修饰了的对象
executorService executorService TtlExecutors.getTtlExecutorService(executorService);
TransmittableThreadLocalString context new TransmittableThreadLocal();
// 在父线程中设置 context.set(value-set-in-parent);
Runnable task new RunnableTask();
Callable call new CallableTask();
executorService.submit(task);
executorService.submit(call);
// Task或是Call中可以读取值是value-set-in-parent String value context.get();