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

安徽网站设计找哪家长沙正规官网建站

安徽网站设计找哪家,长沙正规官网建站,wordpress 不用ftp,什么软件可以做mv视频网站背景 我们希望实现全链路信息,但是代码中一般都会异步的线程处理。 解决思路 我们可以对以前的 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.hyszgw.com/news/71869.html

相关文章:

  • 企业网站改版升级网站怎么做内部链接
  • 建筑网站 国外长沙外贸建站哪里好
  • 西充县建设路小学网站顶尖网站设计公司
  • 安徽网站建设合肥网站建设重庆市建设工程信息网官网30系统
  • 飞速网站排名医药招商网站大全
  • 维修保养网站开发个人做网站接装修活哪个网站好
  • 网站开发app开发化妆培训学校网站源码 下载
  • 网站与手机app是一体吗网页设计英语
  • 网络服务电话南昌网站排名优化软件
  • 银川专业做网站的公司网站 建设设计
  • 黄冈建设局网站什么语言做网站快
  • 建设企业网站方法微信点赞网站怎么做
  • 网站制作及管理教程html网站开发 工具
  • 网站开发的基础知识做查询新生寝室的网站
  • 多个招聘网站格式不一致如何做招聘记录营销自动化系统
  • 自己做网站iis设置最好看免费观看高清大全城中之城
  • 电子产品网站直播网站 咋做
  • 策点市场调研公司成都网站建设优化推
  • 头像在线制作网站做视频网站该把视频文件传到哪
  • 国外优秀的网站设计ui设计工作室
  • 114啦怎么建设网站wordpress 无法登入
  • 做网站学哪方面知识产品设计开发公司
  • 怎样才能有自己的网站美食攻略网站建设课程设计
  • win8网站设计灰色调网站
  • 不用网站做淘宝客手机回收网站做多久
  • 昆山网站建设有限公司怎么样记事本简单好玩的编程代码
  • 书画网站免费源码企业所得税是5%还是25%
  • 做网站还需要服务器吗直播平台网站开发
  • 网站开发后台前端数据库最好的dm单网站建设
  • 美丽说网站代码与蘑菇街网站代码是用什么网站语言做的竞价账户托管