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

找网上公司做网站2022年免费云服务器

找网上公司做网站,2022年免费云服务器,南宁在线制作网站,wordpress自动跳转背景 我们希望实现全链路信息,但是代码中一般都会异步的线程处理。 解决思路 我们可以对以前的 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.ds6.com.cn/news/30959.html

相关文章:

  • 免费自助建站平台系统友情链接检索
  • 网上做网站任务百度网首页官网
  • 网站 域名解析错误西安百度框架户
  • 网站买流量是怎么做的自媒体营销
  • 岳阳网站建设制作广州网站建设
  • 阿里云网站备案时间产品推广策划
  • 网站开发维护计入什么费用佛山网站优化服务
  • 音乐网站建设论文企业网站优化推广
  • 国内jsp网站有哪些百度官网链接
  • 广州手机网站建设费用代运营公司前十名
  • 网站分几个类型优书网首页
  • 响应式网站模板html什么是网络营销策划
  • 深圳好点的网站建设公司优化标题关键词技巧
  • 做一个小公司网站多少钱网络免费推广平台
  • 淘宝返利网站怎么做hao123文件在哪里
  • 汕头做网站优化的公司关键词举例
  • 山东外贸网站建设是什么seo搜索引擎营销工具
  • 中国南昌网站建设自助优化排名工具
  • 如何做产品的网络推广宝鸡seo优化公司
  • 怎么做网站的寄生找谁做百度关键词排名
  • php网站做ios线上运营推广
  • 东莞专业设计网站百度sem竞价推广
  • 微信小程序的制作流程seo专员是干嘛的
  • 响应式网站开发视频企业网站管理系统源码
  • 上海市建筑业官网seo快速排名优化方法
  • 微3g网站提升关键词排名seo软件
  • 适合个人做的网站有哪些如何优化搜索引擎的搜索功能
  • 新网站建设的流程网络服务器搭建
  • 做长海报的网站小红书网络营销策划方案
  • 哪里建设网站最好用在线建站平台免费建网站