当前位置: 首页 > news >正文

阿里云建设网站教学网站建设与管理专业找暑假工

阿里云建设网站教学,网站建设与管理专业找暑假工,建旅游网站的意义,电子贺卡在线制作网站有了InheritableThreadLocal为啥还需要TransmittableThreadLocal? 典型回答 InheritableThreadLocal是用于主子线程之间参数传递的,但是,这种方式有一个问题,那就是必须要是在主线程中手动创建的子线程才可以,而现在池…

有了InheritableThreadLocal为啥还需要TransmittableThreadLocal?

典型回答

InheritableThreadLocal是用于主子线程之间参数传递的,但是,这种方式有一个问题,那就是必须要是在主线程中手动创建的子线程才可以,而现在池化技术非常普遍了,很多时候线程都是通过线程池进行创建和复用的,这时候InheritableThreadLocal就不行了。 TransmittableThreadLocal是阿里开源的一个方案 (开源地址) ,这个类继承并加强InheritableThreadLocal类。用来实现线程之间的参数传递,一经常被用在以下场景中:
1 分布式跟踪系统 或 全链路压测(即链路打标)
2 日志收集记录系统上下文
3 Session级Cache
4 应用容器或上层框架跨应用代码给下层SDK传递信息

使用方式

先需要导入依赖:

<dependency> <groupId>com.alibaba</groupId> <artifactId>transmittable-thread-local</artifactId><version>2.14.2</version>
</dependency>

对于简单的父子线程之间参数传递,可以用以下方式:

TransmittableThreadLocal<String> context = new TransmittableThreadLocal<>();
// 在父线程中设置 
context.set("value-set-in-parent"); 
// 在子线程中可以读取,值是"value-set-in-parent" 
String value = context.get();

如果在线程池中,可以用如下方式使用:

TransmittableThreadLocal<String> 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();

除了Runnable,Callable也支持:

TransmittableThreadLocal<String> 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); 
TransmittableThreadLocal<String> 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();
http://www.yayakq.cn/news/423664/

相关文章:

  • 河南网站建设多少钱如何自建外贸网站
  • 合肥家居网站建设怎么样国外外贸论坛
  • 给微商做网站茶叶网站建设要求
  • 给钱做任务的网站中国最早的电商平台
  • 怎么样给公司做网站营销型网站建设深圳
  • 网站第三方登录怎么做网站开发工作协议书范本
  • 十大免费网站推广崇明网站建设
  • dede网站qq类文章源码国家企业信用信息公示系统官网湖北
  • 网站平台建设需要哪些人员网站建设 客户需求
  • 北京专业做网站推广福州免费企业建站
  • dw博客网站怎么做免费搭建私人网站
  • 成都广告公司logo设计wordpress导航如何优化
  • 网站建设与应用个人建网站运营.
  • 咖啡网站建设市场分析百度开户做网站2400
  • 国外做化工网站如何对新开网站做收录
  • 单页 网站模板电商网站开发app意义
  • 电子科技网站建设做网站原型图软件
  • 大连省建设厅网站广告公司微网站建设
  • 只做传统嫁衣网站lazada
  • 携程网站建设的优缺点轮胎 东莞网站建设
  • 做网站技术电影资源网站建设
  • 手机微网站建设案例及报告国外永久免费服务器
  • 怎样在网站上做营业执照公示北京市网站制作设计
  • 书店网站建设策划书怎么把安装的字体导入wordpress
  • 金华做网站多少钱湖北省最新消息今天
  • 纯静态网站索引怎么做wordpress 主题制作 教程
  • 网站备案现场核验wordpress分类导航主题
  • 建网站收费多少钱做二手物资买卖的网站
  • 成都网站设计哪家比较好wordpress主题 love
  • 绍兴做网站鼎成9377传奇