CN109445880A - 跨线程调用链上下文的传递方法、装置及电子设备 - Google Patents

跨线程调用链上下文的传递方法、装置及电子设备 Download PDF

Info

Publication number
CN109445880A
CN109445880A CN201811233670.2A CN201811233670A CN109445880A CN 109445880 A CN109445880 A CN 109445880A CN 201811233670 A CN201811233670 A CN 201811233670A CN 109445880 A CN109445880 A CN 109445880A
Authority
CN
China
Prior art keywords
thread
class
default
chain context
call chain
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201811233670.2A
Other languages
English (en)
Inventor
刘文涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Digital Trade Technology (beijing) Co Ltd
Original Assignee
Digital Trade Technology (beijing) Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Digital Trade Technology (beijing) Co Ltd filed Critical Digital Trade Technology (beijing) Co Ltd
Priority to CN201811233670.2A priority Critical patent/CN109445880A/zh
Publication of CN109445880A publication Critical patent/CN109445880A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution

Abstract

本发明公开了一种跨线程调用链上下文的传递方法、装置及电子设备,方法包括:定义预设线程类,预设线程类实现原生线程接口;利用类装载器构造预设线程类实例,修改对应的构造函数,以便将调用链上下文注入至预设线程类实例;利用类装载器加载预设线程类实例,并修改运行函数,以使调用预设线程类实例的其他线程获取到调用链上下文。本发明通过定义预设线程类,利用预设线程类实现原生线程接口,利用预设线程类实例替换原生线程接口,修改预设线程类实例对应的构造函数,注入调用链上下文,在运行时修改运行函数,以使调用预设线程类实例的其他线程获取到调用链上下文。本发明无需修改用户的业务代码,即可实现跨线程间调用链上下文的传递。

Description

跨线程调用链上下文的传递方法、装置及电子设备
技术领域
本发明涉及软件领域,具体涉及一种跨线程调用链上下文的传递方法、装置及电子设备。
背景技术
在分布式调用链系统中,调用链的上下文需要在Java应用进程间、线程间及线程内进行传递。在Java应用中,实现多线程的方式一般是通过Java并发框架,将线程的Runnable接口或Callable接口实现提交给并发框架执行。以开源的分布式调用链系统Zipkin为例,Zipkin对线程及线程池的的处理方法是对Runnable接口进行包装,在构造新的Runnable接口实现时,将调用链的上下文信息注入,在其他线程执行Runnable时,即可将父线程的调用链上下文取出。从而解决调用链上下文在跨线程时的传递的问题。但这种处理方式对业务代码有侵入,需要对业务代码进行修改,显式的创建新的Runnable接口或Callable接口实现,涉及修改的成本较大,花费较多人力和时间。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的跨线程调用链上下文的传递方法、装置及电子设备。
根据本发明的一个方面,提供了一种跨线程调用链上下文的传递方法,其包括:
定义预设线程类,预设线程类实现原生线程接口,以便替换原生线程接口;
利用类装载器构造预设线程类实例,修改对应的构造函数,以便将调用链上下文注入至预设线程类实例;
利用类装载器加载预设线程类实例,并修改运行函数,以使调用预设线程类实例的其他线程获取到调用链上下文。
根据本发明的另一方面,提供了一种跨线程调用链上下文的传递装置,其包括:
定义模块,适于定义预设线程类,预设线程类实现原生线程接口,以便替换原生线程接口;
构造模块,适于利用类装载器构造预设线程类实例,修改对应的构造函数,以便将调用链上下文注入至预设线程类实例;
运行模块,适于利用类装载器加载预设线程类实例,并修改运行函数,以使调用预设线程类实例的其他线程获取到调用链上下文。
根据本发明的又一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;
存储器用于存放至少一可执行指令,可执行指令使处理器执行上述跨线程调用链上下文的传递方法对应的操作。
根据本发明的再一方面,提供了一种计算机存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行如上述跨线程调用链上下文的传递方法对应的操作。
根据本发明提供的跨线程调用链上下文的传递方法、装置及电子设备,定义预设线程类,预设线程类实现原生线程接口,以便替换原生线程接口;利用类装载器构造预设线程类实例,修改对应的构造函数,以便将调用链上下文注入至预设线程类实例;利用类装载器加载预设线程类实例,并修改运行函数,以使调用预设线程类实例的其他线程获取到调用链上下文。本发明通过定义预设线程类,利用预设线程类实现原生线程接口,可以在用户的业务代码将原生线程接口提交到线程池执行时,利用预设线程类实例替换原生线程接口,并修改预设线程类实例对应的构造函数,注入调用链上下文,在运行时修改运行函数,以使调用预设线程类实例的其他线程获取到调用链上下文。本发明无需修改用户的业务代码,即可实现跨线程间调用链上下文的传递。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的跨线程调用链上下文的传递方法的流程图;
图2示出了根据本发明另一个实施例的跨线程调用链上下文的传递方法的流程图;
图3示出了根据本发明一个实施例的跨线程调用链上下文的传递装置的功能框图;
图4示出了根据本发明一个实施例的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的跨线程调用链上下文的传递方法的流程图。如图1所示,跨线程调用链上下文的传递方法具体包括如下步骤:
步骤S101,定义预设线程类,预设线程类实现原生线程接口,以便替换原生线程接口。
Java中对应一次请求生成一个全局唯一的ID(TraceId),通过TraceID将不同系统“孤立”的调用信息串在一起,组成调用链。一个TraceID代表一次请求。除TraceID外,线程服务调用间还记录了调用链的父子关系,方便跨线程间相互调用时记录调用关系。本实施例中在不修改原有业务代码的前提下,使跨线程间可以实现调用链上下文的传递。
原生线程接口即java线程现有的线程接口,如Runnable接口、Callable接口等。
Java线程调用过程如下:Java的线程池由Executors线程池类文件提供创建线程池,以创建一个定长线程池为例进行说明。首先,用户的业务代码通过调用Executors类文件中的newFixedThreadPool静态方法创建一个继承ExecutorService抽象类的定长线程池ThreadPoolExecutor实例。之后,用户的业务代码中实现原生线程接口,原生线程接口以Runnable接口为例进行说明。业务代码创建一个实现Runnable接口的方法,实现Runnable接口的方法中的运行函数(run函数)内封装了业务的具体业务逻辑,并将实现Runnable接口的方法通过ExecutorService抽象类的提交函数(submit函数)提交给线程池执行。线程池执行实现Runnable接口的方法的运行函数(run函数),完成调用业务的业务逻辑。
针对以上Java线程调用,定义一个预设线程类,使其实现原生线程接口,具体的,如定义TraceRunnable类,其中,TraceRunnable类实现Runnable接口,以便使用预设线程类替换业务代码中实现的原生线程接口。
步骤S102,利用类装载器构造预设线程类实例,修改对应的构造函数,以便将调用链上下文注入至预设线程类实例。
由于Java中的所有类文件只有装载到Java虚拟机(Java Virtual Machine,JVM)中才能运行,类装载器(ClassLoader)可以完成将Java中的所有类文件装载到JVM中的装载工作。Java代理(Java Agent,以下简称Agent)是运行在应用程序main方法之前的拦截器。Java虚拟机插装机制(JVMInstrumentation)可以用独立于应用程序之外的Agent来监测和协助运行在JVM上的应用程序。这种监测和协助包括但不限于获取JVM运行时状态、替换和修改类定义等。
基于Java虚拟机插装机制,利用类装载器加载预设线程类,构造得到预设线程类实例。在构造预设线程类实例时,在原有构造函数的基础上进行修改,将调用链上下文注入至预设线程类实例,从而完成预设线程类实例中保存调用链上下文。
进一步,在业务代码运行前,JVM虚拟机插装机制可以调用Agent中的premain入口函数进行拦截。Agent将ClassFileTransformer接口实现通过addTransformer方法注入给JVM虚拟机插装机制。类装载器加载业务代码,并调用Agent定义的ClassFileTransformer接口实现的transform方法,将业务代码中的原生线程接口替换为预设线程类,以及对预设线程类中的构造函数进行修改并重新加载,从而完成在加载过程中的动态修改,而不需要对业务代码本身进行修改。以上实现可以基于字节码增强技术实现。
步骤S103,利用类装载器加载预设线程类实例,并修改运行函数,以使调用预设线程类实例的其他线程获取到调用链上下文。
在完成将调用链上下文注入至预设线程类实例后,预设线程类实例在线程池中被执行时,还需要使调用预设线程类实例的其他线程能够从预设线程类实例中获取到调用链上下文。因此,利用类装载器加载预设线程类实例时,还需要修改原有的运行函数,提供给其他线程获取调用链上下文的方法。具体的,如在运行函数中增加取值函数,其他线程通过调用预设线程类实例的取值函数来获取调用链上下文,从而实现在避免修改原有业务代码的基础上,跨线程获取到调用链上下文。在其他线程调用预设线程类实例时,基于现有业务代码本身所设置的线程服务调用间记录的调用链的父子关系、现有线程ThreadLocal所维护的线程间调用关系等,可以保障在其他线程调用预设线程类,从而获取到调用链上下文,实现调用链上下文的传递。
以上类装载器加载预设线程类实例,并修改运行函数的技术可以基于字节码增强技术实现。
根据本发明提供的跨线程调用链上下文的传递方法,定义预设线程类,预设线程类实现原生线程接口,以便替换原生线程接口;利用类装载器构造预设线程类实例,修改对应的构造函数,以便将调用链上下文注入至预设线程类实例;利用类装载器加载预设线程类实例,并修改运行函数,以使调用预设线程类实例的其他线程获取到调用链上下文。本发明通过定义预设线程类,利用预设线程类实现原生线程接口,可以在用户的业务代码将原生线程接口提交到线程池执行时,利用预设线程类实例替换原生线程接口,并修改预设线程类实例对应的构造函数,注入调用链上下文,在运行时修改运行函数,以使调用预设线程类实例的其他线程获取到调用链上下文。本发明无需修改用户的业务代码,即可实现跨线程间调用链上下文的传递。
图2示出了根据本发明另一个实施例的跨线程调用链上下文的传递方法的流程图。如图2所示,跨线程调用链上下文的传递方法具体包括如下步骤:
步骤S201,定义预设线程类,预设线程类实现原生线程接口,以便替换原生线程接口。
针对Java线程调用,定义一个预设线程类,如定义TraceRunnable类,使其实现原生线程接口。具体的,TraceRunnable类可以实现Runnable接口或Callable接口等原生线程接口。预设线程类可以利用包装函数替换原生线程接口,如warp函数,TraceRunnable.warp(Runnable runnable),实现预设线程类替换原生线程接口。
步骤S202,在类加载器加载线程池时,利用Java字节码类库将线程池的提交函数的参数由原生线程接口替换为预设线程类,以保障线程池执行预设线程类对应的预设线程类实例。
在使用现有技术由用户的业务代码创建线程池后,类加载器加载线程池时,基于Java虚拟机插装机制,利用Java字节码类库将线程池的提交函数的参数由原生线程接口替换为预设线程类,如以原生线程接口Runnable、预设线程类TraceRunnable为例进行说明,将提交函数submit(Runnable runnable)中的入口参数Runnable替换为TraceRunnable.warp(Runnable runnable),从而实现当业务代码调用ThreadPoolExecutor.submit(runnable)方法时,传递给线程池的是替换后的TraceRunnable实例,保障了线程池在执行时,执行的是预设线程类对应的预设线程类实例。以上技术基于字节码增强技术在加载过程中动态修改,避免对业务代码进行修改。
步骤S203,利用类加载器构建预设线程类实例,并利用Java字节码操控框架在对应的构造函数中添加调用链上下文赋值函数,以便使用调用链上下文赋值函数将调用链上下文注入至预设线程类实例。
Java字节码操控框架(ASM)可以用来动态生成类文件或者增强已有类文件等。ASM可以直接产生二进制的class类文件,也可以在类文件被加载入Java虚拟机之前动态改变其中的行为、方法等。本实施例中基于Java虚拟机插装机制,在类加载器构建预设线程类实例时,可以使用ASM来修改预设线程类实例的构造函数。在构造函数内添加调用链上下文赋值函数setAttachment,完成将调用链上下文通过setAttachment方法注入给预设线程类实例。
步骤S204,在线程池执行预设线程类实例的运行函数时,利用Java字节码操控框架在运行函数中添加调用链上下文取值函数,以使调用预设线程类实例的其他线程利用调用链上下文取值函数获取到调用链上下文。
基于Java虚拟机插装机制,在线程池执行预设线程类实例的运行函数时,在类加载器加载预设线程类实例,使用ASM修改预设线程类实例的运行函数run函数,添加调用链上下文取值函数getAttachment。在run函数运行开始前和结束后,调用预设线程类实例的其他线程均通过调用调用链上下文取值函数getAttachment来获取预设线程类实例中注入的调用链上下文。
根据本发明提供的跨线程调用链上下文的传递方法,通过字节码增强技术,实现在业务代码将原生线程接口实现提交到线程池执行时,动态将原生线程接口实现包装为预设线程类实例。并利用字节码增强技术,修改预设线程类实例对应的构造函数和运行函数,实现在构造函数内注入调用链上下文,以及获取调用链上下文等功能,在避免修改原有的业务代码的基础上,完成跨线程调用链上下文的传递。
图3示出了根据本发明一个实施例的跨线程调用链上下文的传递装置的功能框图。如图3所示,跨线程调用链上下文的传递装置包括如下模块:
定义模块310适于:定义预设线程类,预设线程类实现原生线程接口,以便替换原生线程接口。
构造模块320适于:利用类装载器构造预设线程类实例,修改对应的构造函数,以便将调用链上下文注入至预设线程类实例。
运行模块330适于:利用类装载器加载预设线程类实例,并修改运行函数,以使调用预设线程类实例的其他线程获取到调用链上下文。
可选地,装置还包括:替换模块340。
替换模块340适于:在类装载器加载线程池时,利用Java字节码类库将线程池的提交函数的参数由原生线程接口替换为预设线程类,以保障线程池执行预设线程类对应的预设线程类实例。
可选地,构造模块320进一步适于:利用类装载器构造预设线程类实例,并利用Java字节码操控框架在对应的构造函数中添加调用链上下文赋值函数,以便使用调用链上下文赋值函数将调用链上下文注入至预设线程类实例。
可选地,运行模块330进一步适于:在线程池执行预设线程类实例的运行函数时,利用Java字节码操控框架在运行函数中添加调用链上下文取值函数,以使调用预设线程类实例的其他线程利用调用链上下文取值函数获取到调用链上下文。
以上各模块的描述参照方法实施例中对应的描述,在此不再赘述。
本申请还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的跨线程调用链上下文的传递方法。
图4示出了根据本发明一个实施例的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图4所示,该电子设备可以包括:处理器(processor)402、通信接口(Communications Interface)404、存储器(memory)406、以及通信总线408。
其中:
处理器402、通信接口404、以及存储器406通过通信总线408完成相互间的通信。
通信接口404,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器402,用于执行程序410,具体可以执行上述跨线程调用链上下文的传递方法实施例中的相关步骤。
具体地,程序410可以包括程序代码,该程序代码包括计算机操作指令。
处理器402可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器406,用于存放程序410。存储器406可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序410具体可以用于使得处理器402执行上述任意方法实施例中的跨线程调用链上下文的传递方法。程序410中各步骤的具体实现可以参见上述跨线程调用链上下文的传递实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的跨线程调用链上下文的传递装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (10)

1.一种跨线程调用链上下文的传递方法,其特征在于,所述方法包括:
定义预设线程类,所述预设线程类实现原生线程接口,以便替换原生线程接口;
利用类装载器构造预设线程类实例,修改对应的构造函数,以便将调用链上下文注入至所述预设线程类实例;
利用类装载器加载预设线程类实例,并修改运行函数,以使调用所述预设线程类实例的其他线程获取到调用链上下文。
2.根据权利要求1所述的方法,其特征在于,在所述利用类装载器构造预设线程类实例,并修改构造函数,将调用链上下文注入至所述预设线程类实例之前,所述方法还包括:
在类装载器加载线程池时,利用Java字节码类库将线程池的提交函数的参数由原生线程接口替换为预设线程类,以保障线程池执行所述预设线程类对应的预设线程类实例。
3.根据权利要求1或2所述的方法,其特征在于,所述利用类装载器构造预设线程类实例,修改对应的构造函数,以便将调用链上下文注入至所述预设线程类实例进一步包括:
利用类装载器构造预设线程类实例,并利用Java字节码操控框架在对应的构造函数中添加调用链上下文赋值函数,以便使用所述调用链上下文赋值函数将调用链上下文注入至所述预设线程类实例。
4.根据权利要求1或2所述的方法,其特征在于,所述利用类装载器加载预设线程类实例,并修改运行函数,以使调用所述预设线程类实例的其他线程获取到调用链上下文进一步包括:
在线程池执行所述预设线程类实例的运行函数时,利用Java字节码操控框架在所述运行函数中添加调用链上下文取值函数,以使调用所述预设线程类实例的其他线程利用所述调用链上下文取值函数获取到调用链上下文。
5.一种跨线程调用链上下文的传递装置,其特征在于,所述装置包括:
定义模块,适于定义预设线程类,所述预设线程类实现原生线程接口,以便替换原生线程接口;
构造模块,适于利用类装载器构造预设线程类实例,修改对应的构造函数,以便将调用链上下文注入至所述预设线程类实例;
运行模块,适于利用类装载器加载预设线程类实例,并修改运行函数,以使调用所述预设线程类实例的其他线程获取到调用链上下文。
6.根据权利要求5所述的装置,其特征在于,所述装置还包括:
替换模块,适于在类装载器加载线程池时,利用Java字节码类库将线程池的提交函数的参数由原生线程接口替换为预设线程类,以保障线程池执行所述预设线程类对应的预设线程类实例。
7.根据权利要求5或6所述的装置,其特征在于,所述构造模块进一步适于:
利用类装载器构造预设线程类实例,并利用Java字节码操控框架在对应的构造函数中添加调用链上下文赋值函数,以便使用所述调用链上下文赋值函数将调用链上下文注入至所述预设线程类实例。
8.根据权利要求5或6所述的装置,其特征在于,所述运行模块进一步适于:
在线程池执行所述预设线程类实例的运行函数时,利用Java字节码操控框架在所述运行函数中添加调用链上下文取值函数,以使调用所述预设线程类实例的其他线程利用所述调用链上下文取值函数获取到调用链上下文。
9.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-4中任一项所述的跨线程调用链上下文的传递方法对应的操作。
10.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求1-4中任一项所述的跨线程调用链上下文的传递方法对应的操作。
CN201811233670.2A 2018-10-23 2018-10-23 跨线程调用链上下文的传递方法、装置及电子设备 Pending CN109445880A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811233670.2A CN109445880A (zh) 2018-10-23 2018-10-23 跨线程调用链上下文的传递方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811233670.2A CN109445880A (zh) 2018-10-23 2018-10-23 跨线程调用链上下文的传递方法、装置及电子设备

Publications (1)

Publication Number Publication Date
CN109445880A true CN109445880A (zh) 2019-03-08

Family

ID=65547767

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811233670.2A Pending CN109445880A (zh) 2018-10-23 2018-10-23 跨线程调用链上下文的传递方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN109445880A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110032394A (zh) * 2019-04-12 2019-07-19 深圳市腾讯信息技术有限公司 一种无源码文件的分析方法、装置和存储介质
CN112416798A (zh) * 2020-12-04 2021-02-26 深圳前海微众银行股份有限公司 数据处理方法、装置、设备和存储介质
CN112559073A (zh) * 2020-12-16 2021-03-26 北京百度网讯科技有限公司 程序启动方法、类间关系构建方法及装置、移动终端
CN113448585A (zh) * 2020-12-11 2021-09-28 北京新氧科技有限公司 一种对线程池的优化方法、装置、电子设备和存储介质
CN114996128A (zh) * 2022-05-19 2022-09-02 青矩技术股份有限公司 基于asm框架的脚本处理方法、装置、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1083485A2 (en) * 1999-09-10 2001-03-14 Sun Microsystems, Inc. Apparatus and methods for managing resource usage
CN101405993A (zh) * 2006-03-13 2009-04-08 微软公司 使用计算上下文的网络接口路由
CN101854311A (zh) * 2009-03-31 2010-10-06 国际商业机器公司 在web服务器上传递上下文信息的方法和装置
US8499299B1 (en) * 2010-06-29 2013-07-30 Ca, Inc. Ensuring deterministic thread context switching in virtual machine applications
CN106487596A (zh) * 2016-10-26 2017-03-08 宜人恒业科技发展(北京)有限公司 分布式服务跟踪实现方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1083485A2 (en) * 1999-09-10 2001-03-14 Sun Microsystems, Inc. Apparatus and methods for managing resource usage
CN101405993A (zh) * 2006-03-13 2009-04-08 微软公司 使用计算上下文的网络接口路由
CN101854311A (zh) * 2009-03-31 2010-10-06 国际商业机器公司 在web服务器上传递上下文信息的方法和装置
US8499299B1 (en) * 2010-06-29 2013-07-30 Ca, Inc. Ensuring deterministic thread context switching in virtual machine applications
CN106487596A (zh) * 2016-10-26 2017-03-08 宜人恒业科技发展(北京)有限公司 分布式服务跟踪实现方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
_晓__: "TransmittableThreadLocal 源码解析TransmittableThreadLocal 源码解析", 《HTTPS://WWW.JIANSHU.COM/P/AAB6B1E7357D》 *
OLDRATLEE: "TtlRunnable2018年6月10日代码", 《HTTPS://GITHUB.COM/ALIBABA/TRANSMITTABLE-THREAD-LOCAL/BLOB/2E764D4A22C82F4B076B971C622D05253AA58950/SRC/MAIN/JAVA/COM/ALIBABA/TTL/TTLRUNNABLE.JAVA》 *
孙大圣666: "alibaba transmittable-thread-local源码解析", 《HTTPS://BLOG.CSDN.NET/QQ_31865983/ARTICLE/DETAILS/82721973》 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110032394A (zh) * 2019-04-12 2019-07-19 深圳市腾讯信息技术有限公司 一种无源码文件的分析方法、装置和存储介质
CN110032394B (zh) * 2019-04-12 2022-05-31 深圳市腾讯信息技术有限公司 一种无源码文件的分析方法、装置和存储介质
CN112416798A (zh) * 2020-12-04 2021-02-26 深圳前海微众银行股份有限公司 数据处理方法、装置、设备和存储介质
CN112416798B (zh) * 2020-12-04 2024-04-09 深圳前海微众银行股份有限公司 数据处理方法、装置、设备和存储介质
CN113448585A (zh) * 2020-12-11 2021-09-28 北京新氧科技有限公司 一种对线程池的优化方法、装置、电子设备和存储介质
CN113448585B (zh) * 2020-12-11 2024-01-16 北京新氧科技有限公司 一种线程池的编译方法、装置、电子设备和存储介质
CN112559073A (zh) * 2020-12-16 2021-03-26 北京百度网讯科技有限公司 程序启动方法、类间关系构建方法及装置、移动终端
CN114996128A (zh) * 2022-05-19 2022-09-02 青矩技术股份有限公司 基于asm框架的脚本处理方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
CN109445880A (zh) 跨线程调用链上下文的传递方法、装置及电子设备
US11354144B2 (en) Java native interface and windows universal app hooking
CN104731625B (zh) 一种加载插件的方法、装置和移动终端
US8464230B2 (en) Methods and systems to implement non-ABI conforming features across unseen interfaces
CN104899025A (zh) 一种生成渠道包的方法和装置
CN112835975B (zh) 一种在区块链中部署、更新、调用智能合约的方法
US8533689B2 (en) Method, apparatus and computer program product for creating inter-language interface
CN110147281A (zh) 优化雪花算法在金融业务中应用的方法、装置、电子设备
CN109933350A (zh) 在应用中嵌入代码的方法、装置及电子设备
US20080301636A1 (en) Per-instance and per-class aspects
CN109445797A (zh) 处理任务执行方法及装置
CN109598107A (zh) 一种基于应用安装包文件的代码转换方法及装置
CN104778075A (zh) Android系统中native层调用Java层API的方法和装置
CN104503778A (zh) 一种应用程序的安装方法和装置
CN109614772A (zh) 基于应用安装包文件的代码转换方法及装置
CN106528206A (zh) 应用的启动控制方法、装置和加固应用安装包的装置
CN106371809B (zh) 线程处理器及线程处理方法
CN110018831B (zh) 程序处理方法、装置及计算机可读存储介质
US20060095898A1 (en) Method for integrating multiple object files from heterogeneous architectures into a set of files
CN108415737A (zh) 一种在虚拟机中加载插件的方法及电子终端
US11435989B2 (en) Thread-local return structure for asynchronous state machine
CN107908391A (zh) 程序调用的优化方法及装置
CN105393216B (zh) 运行时内存调节
US10474476B1 (en) Techniques for logging information
CN110489124A (zh) 源代码执行方法、装置、存储介质及计算机设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20190308

RJ01 Rejection of invention patent application after publication