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

茌平建设局网站东莞专业网站推广多少钱

茌平建设局网站,东莞专业网站推广多少钱,cpu优化软件,网站对图片优化背景 我们希望实现全链路信息,但是代码中一般都会异步的线程处理。 解决思路 我们可以对以前的 Runable 和 Callable 进行增强。 可以使用 ali 已经存在的实现方式。 TransmittableThreadLocal (TTL) 解决异步执行时上下文传递的问题 核心的实现思路如下&#…

背景

我们希望实现全链路信息,但是代码中一般都会异步的线程处理。

解决思路

我们可以对以前的 Runable 和 Callable 进行增强。

可以使用 ali 已经存在的实现方式。

TransmittableThreadLocal (TTL) 解决异步执行时上下文传递的问题

核心的实现思路如下:

1)异步执行前,把当前线程的 MDC 信息放入执行对象中。

2)异步执行时,把执行对象中的信息放入 MDC 等信息。

3) 异步执行后,清空执行对象。

问题

Runable 和 Callable 只是接口,没有额外信息,所以需要进行增强。

实现方式

接口定义

package com.github.houbb.heaven.support.concurrent.context;import java.util.Map;/*** 跨线程处理类** @since 0.3.0*/
public interface CrossThreadProcessor {/*** 初始化上下文* @param contextMap 上下文*/void initContext(Map<String, Object> contextMap);/*** 执行之前* @param contextMap 上下文*/void beforeExecute(Map<String, Object> contextMap);/*** 执行之后* @param contextMap 上下文*/void afterExecute(Map<String, Object> contextMap);}

对可执行接口进行增强

package com.github.houbb.heaven.support.concurrent.context;import com.github.houbb.heaven.util.lang.SpiUtil;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;/*** 跨线程处理** 作用:用来跨线程处理传递信息,比如 async,线程池等。** 比如在 aop 中,直接处理。** <pre>* Object[] args = point.args();* Object arg0 = args[0];** // 直接转换为当前的对象* if(arg0 instanceOf Runnable) {*      args[0] = new CrossThreadWrapper((Runnable)arg0);* } else if(arg0 instanceOf Callable) {*      args[0] = new CrossThreadWrapper((Callable)arg0);* }** // 继续处理* </pre>* @param <T> 泛型* @since 0.3.0*/
public class CrossThreadWrapper<T> implements Runnable, Callable<T> {private Runnable runnable;private Callable<T> callable;/*** 通过 spi 获取所有的实现类*/private static List<CrossThreadProcessor> processorList = new ArrayList<>();/*** 上下文*/private final Map<String, Object> context = new HashMap<>();static {processorList = SpiUtil.getClassImplList(CrossThreadProcessor.class);}public CrossThreadWrapper(Runnable runnable) {// 任务执行之前this.initContext();this.runnable = runnable;}public CrossThreadWrapper(Callable<T> callable) {this.initContext();this.callable = callable;}@Overridepublic void run() {try {beforeExecute();this.runnable.run();} finally {afterExecute();}}@Overridepublic T call() throws Exception {try {beforeExecute();return this.callable.call();} finally {afterExecute();}}/*** 初始化上下文*/protected void initContext() {for(CrossThreadProcessor processor : processorList) {processor.initContext(context);}}/*** 执行前*/protected void beforeExecute() {for(CrossThreadProcessor processor : processorList) {processor.beforeExecute(context);}}/*** 执行之后*/protected void afterExecute() {for(CrossThreadProcessor processor : processorList) {processor.afterExecute(context);}}}

用法

实现接口

我们只需要实现 CrossThreadProcessor 接口。

然后 spi 中配置,服务会自动发现。

aop

可以在 spring aop 中,对以前的方法执行进行增强。

http://www.yayakq.cn/news/293275/

相关文章:

  • 旅游网站开发的流程图我的网站首页打不开
  • 阿里云网站服务器网站制作什么语言最好
  • 400电话 网站建设汕头网络推广seo渠道
  • 简述网站开发平台小制作小发明大全简单
  • 做驾考学时在哪个网站购物网站数据分析
  • 光效网站网站排名优化服务
  • 做网站实时数据用接口vi设计费用
  • 网站建设款如何入账网站建设 做一个网站需要多少钱
  • 广州网站建设阿里云页面访问紧急升级中通知怎么关闭
  • 网络推广网站大全茶楼网站
  • 广西建设监理协会官网站国内免费crm
  • 做百度移动端网站排名qq小程序api
  • 外贸建站行业好做吗上海做兼职的网站
  • 天天爱天天做网站校园二手市场网站开发
  • 网站建设板块建议电商好做吗现在
  • 网站设计比例建设网站需要哪些经营范围
  • 什么是网站建设需求葛洲坝建设公司官网
  • 建一个网站怎么赚钱口碑好的定制网站建设公司
  • 广州市官网网站建设公司网站开发图片文字
  • 黄岩区住房保障建设局网站大理建网站
  • 模板网站什么意思百度旗下有哪些app
  • 网站设计郑州wordpress开发人力资源
  • 宁波自适应网站建设优化建站wordpress 指定分类 文章数
  • 网站建设公司招网站设计怎么做网站logo
  • 网站怎么在工信部备案信息查询哈尔滨网站提升排名
  • 徐州做网站的培训机构工程建设内容包括哪些
  • 网站名称怎么起好听discuz网站同步
  • 浙江银安建设有限公司网站wordpress手机版怎么用
  • 清远企业网站排名phpcms 安装官网的教程更换域名后网站图片还是无法显示
  • 网络优化首先要有网站佛山格尔做网站的公司