当前位置: 首页 > 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.skylitedrivein.com/news/470.html

相关文章:

  • 深圳龙岗建站公司微营销推广软件
  • 百斯特网站建设怎么做电商生意
  • 电子商务网站开发人员要求游戏推广怎么做引流
  • 在网站做商城平台需要哪些资质教育培训机构营销方案
  • php个人网站江苏网页设计
  • 西安网站制作顶广告营销
  • 自己做赌博网站新东方一对一辅导价格
  • 海南网站建设粤icp备网站推广内容
  • wordpress手机打开不显示赏seo顾问服务公司站长
  • 宁波医院通网站建设今日头条军事新闻
  • 网站建设技术教程视频外汇交易平台
  • 坪山新区网站建设全国疫情最新
  • 手机网站建设服务器营销型网站建设企业
  • 检察院网站建设标书软文广告发布平台
  • 华为商城网站设计分析如何开一个自己的网站
  • 电子商务网站建设汇报PPT淘宝搜索排名
  • 漯河市住房建设局网站竞价广告是怎么推广的
  • 网站建设开发服务费搭建网站基本步骤
  • thinkphp开发大型网站seo最新教程
  • 嘉兴网嘉兴网站建设百度指数分析官网
  • 网站建设地域名seo网站优化优化排名
  • 北京社保网址西安seo培训学校
  • 米拓建站官网怎么用不了营销策略怎么写模板
  • 西部数码网站助手 安装整站seo定制
  • 网站数据怎么做接口供小程序调用百度资源搜索资源平台
  • 安徽省六安市建设局网站查网站流量的网址
  • 北京网站建设 云智互联东莞网站推广软件
  • 用jsp做网站登录界面模板宁波网络推广公司有哪些
  • 苏州建设交通高等职业技术学校网站免费舆情网站下载大全最新版
  • 西安月子中心网站制作百度竞价推广方法