CN113485839A - 一种数据处理方法及系统 - Google Patents
一种数据处理方法及系统 Download PDFInfo
- Publication number
- CN113485839A CN113485839A CN202110850139.5A CN202110850139A CN113485839A CN 113485839 A CN113485839 A CN 113485839A CN 202110850139 A CN202110850139 A CN 202110850139A CN 113485839 A CN113485839 A CN 113485839A
- Authority
- CN
- China
- Prior art keywords
- thread
- local variable
- attribute
- findthread
- null
- 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
Links
- 238000003672 processing method Methods 0.000 title abstract description 11
- 238000000034 method Methods 0.000 claims description 31
- 230000002159 abnormal effect Effects 0.000 claims description 16
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000005034 decoration Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000009545 invasion Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据处理方法及系统,创建带有父线程属性的子线程,基于子线程的父线程属性,遍历子线程的上级线程,并判断上级线程是否存在线程局部变量值,若存在,基于该上级线程的线程对象获取线程局部变量值localValue并进行访问变量操作。通过上述方案,当多线程环境下,子线程要获取上级线程局部变量值时,无需对线程父子关系数据结构和线程变量的Map对象进行并发访问控制来获取上级线程局部变量值,即,无需额外维护线程父子关系的数据结构和线程变量的Map对象,只需根据线程的父子关系来遍历子线程的上级线程,得到线程局部变量值,从而实现提高多线程环境下,子线程获取上级线程局部变量值的效率的目的。
Description
技术领域
本发明涉及线程处理技术领域,更具体地说,涉及一种数据处理方法及系统。
背景技术
在Java计算编程语言中,通过把数据放在线程局部变量(ThreadLocal)中让每个线程创建一个该变量的副本,ThreadLocal可高效地为每个使用它的线程提供单独的线程局部变量值的副本。
现有技术中,如果需要访问上级线程的某变量值,需要维护一个线程上下级关系的数据结构,比如树,树节点为子线程;以及维护一个线程变量Map,用来存放每个线程的变量集合,Map的key为线程对象,Map的value为变量集合。在需要访问上级线程的变量值时,需要在存放线程上下级关系的树中找到该子线程节点,然后从下往上遍历该树来获取其上级线程;对于每个上级线程,再看线程变量Map中该线程是否存在需要的变量。由于Map对象中存储多个线程的变量值,当多线程对Map对象进行并发访问时,如,当A线程和B线程对Map对象进行并发访问获取ThreadLocal的值时,将要访问的Map对象进行锁住,B线程进行等待,A线程从锁住的Map对象获取变量值,当A线程获取变量值的操作完成后再将Map对象进行释放,B线程再对Map对象进行访问,且存放线程上下级关系的数据结构也需要进行同样的并发控制,使得多线程对Map对象进行并发访问时获取变量值的效率低。
发明内容
有鉴于此,本发明公开了一种数据处理方法及系统,实现提高多线程环境下子线程获取上级线程局部变量值的效率的目的。
为了实现上述目的,本发明公开的技术方案如下:
本发明第一方面公开了一种数据处理方法,所述方法包括:
创建带有父线程parentThread的属性的子线程childThread;
基于所述子线程childThread的父线程parentThread的属性,遍历所述子线程childThread的上级线程,并判断所述上级线程是否存在线程局部变量值localValue;
若所述上级线程存在所述线程局部变量值localValue,基于预先获取到的所述上级线程的线程对象findThread获取所述线程局部变量值localValue;
基于所述线程局部变量值localValue进行访问变量操作。
优选的,所述创建带有父线程parentThread的属性的子线程childThread,包括:
创建当前线程Thread类的ParentAwareThread子类;
基于所述ParentAwareThread类,创建子线程childThread;
将预先获取到的当前线程对象findThread赋值给所述子线程childThread的父线程parentThread的属性。
优选的,所述基于所述子线程childThread的父线程parentThread的属性,遍历所述子线程childThread的上级线程,并判断所述上级线程是否存在线程局部变量值localValue,包括:
基于所述子线程childThread的父线程parentThread的属性,判断预先获取到的线程对象findThread是否为空值null;
若所述线程对象findThread为空值null,则确定所述上级线程不存在线程局部变量值localValue;
若所述线程对象findThread不为空值null,则确定所述上级线程存在所述线程局部变量值localValue。
优选的,还包括:
若所述上级线程不存在所述线程局部变量值localValue,则生成第一异常信息,并判断所述线程对象findThread的类型是否为ParentAwareThread类;
若所述线程对象findThread的类型为ParentAwareThread类,将所述线程对象findThread设置为父线程parentThread的属性;
若所述线程对象findThread的类型不为所述ParentAwareThread类,确定所述线程对象findThread为空值null。
优选的,所述基于预先获取到的所述上级线程的线程对象findThread获取所述线程局部变量值localValue,包括:
基于预设的反射机制获取所述上级线程的线程对象findThread的线程本地变量threadLocals的属性值;
判断所述线程本地变量threadLocals的属性值是否为空值null;
若所述线程本地变量threadLocals的属性值为空值null,则生成第二异常信息;
若所述线程本地变量threadLocals的属性值不为空值null,基于预先获取到的local参数调用所述线程本地变量threadLocals的属性值得到entry类;
判断所述entry类的属性值是否为空值null;
若所述entry类的属性值为空值null,则生成所述第二异常信息;
若所述entry类的属性值不为空值null,基于所述预设的反射机制获取所述线程局部变量值localValue。
本发明第二方面公开了一种数据处理系统,所述系统包括:
创建单元,用于创建带有父线程parentThread的属性的子线程childThread;
遍历单元,用于基于所述子线程childThread的父线程parentThread的属性,遍历所述子线程childThread的上级线程,并判断所述上级线程是否存在线程局部变量值localValue;
获取单元,用于若所述上级线程存在所述线程局部变量值localValue,基于预先获取到的所述上级线程的线程对象findThread获取所述线程局部变量值localValue;
操作单元,用于基于所述线程局部变量值localValue进行访问变量操作。
优选的,所述创建单元,包括:
第一创建模块,用于创建当前线程Thread类的ParentAwareThread子类;
第二创建模块,用于基于所述ParentAwareThread类,创建子线程childThread;
第一设置模块,用于将预先获取到的当前线程对象findThread的属性赋值给所述子线程childThread的父线程parentThread的属性。
优选的,所述遍历单元,包括:
第一判断模块,用于基于所述子线程childThread的父线程parentThread的属性,判断预先获取到的线程对象findThread是否为空值null;
第一确定模块,用于若所述线程对象findThread为空值null,则确定所述上级线程不存在线程局部变量值localValue;
第二确定模块,用于若所述线程对象findThread不为空值null,则确定所述上级线程存在所述线程局部变量值localValue。
优选的,还包括:
判断单元,用于若所述上级线程不存在所述线程局部变量值localValue,则生成第一异常信息,并判断所述线程对象findThread的类型是否为ParentAwareThread类;
设置单元,用于若所述线程对象findThread的类型为ParentAwareThread类,将所述线程对象findThread设置为父线程parentThread的属性;
确定单元,用于若所述线程对象findThread的类型不为所述ParentAwareThread类,确定所述线程对象findThread为空值null。
优选的,所述获取单元,包括:
第一获取模块,用于基于预设的反射机制获取所述上级线程的线程对象findThread的线程本地变量threadLocals的属性值;
第一判断模块,用于判断所述线程本地变量threadLocals的属性值是否为空值null;
第一生成模块,用于若所述线程本地变量threadLocals的属性值为空值null,则生成第二异常信息;
调用模块,用于若所述线程本地变量threadLocals的属性值不为空值null,基于预先获取到的local参数调用所述线程本地变量threadLocals的属性值得到entry类;
第二判断模块,用于判断所述entry类的属性值是否为空值null;
第二生成模块,用于若所述entry类的属性值为空值null,则生成所述第二异常信息;
第二获取模块,用于若所述entry类的属性值不为空值null,基于所述预设的反射机制获取所述线程局部变量值localValue。
经由上述技术方案可知,创建带有父线程parentThread属性的子线程,基于子线程childThread的父线程parentThread属性,遍历子线程childThread的上级线程,并判断上级线程ParentAwareThread是否存在线程局部变量值localValue,若上级线程ParentAwareThread存在线程局部变量值localValue,基于当前线程的线程对象findThread获取线程局部变量值localValue,基于该上级线程的线程的线程对象获取线程局部变量值localValue并进行访问变量操作。通过上述方案,当多线程环境下子线程获取上级线程局部变量值时,无需对线程父子关系数据结构和线程变量的Map对象进行并发访问控制来获取上级线程局部变量值,即,无需额外维护线程父子关系的数据结构和线程变量的Map对象,只需根据线程的父子关系来遍历子线程的上级线程,得到线程局部变量值,从而实现提高多线程环境下,子线程获取上级线程局部变量值的效率的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例公开的一种数据处理方法的流程示意图;
图2为本发明实施例公开的创建带有父线程属性的子线程的流程示意图;
图3为本发明实施例公开的判断上级线程是否存在线程局部变量值localValue的过程的流程示意图;
图4为本发明实施例公开的基于预先获取到的线程对象findThread获取线程局部变量值localValue的流程示意图;
图5为本发明实施例公开的一种数据处理系统的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
由背景技术可知,多线程对共享资源对象进行并发访问时获取线程变量值的效率低。
为了解决该问题,本发明实施例公开了一种数据处理方法及系统,无需额外维护线程父子关系的数据结构及线程变量的Map对象,只需根据线程的父子关系来遍历子线程的上级线程,得到线程局部变量值,从而实现提高多线程获取线程局部变量值的效率的目的。具体实现方式通过下述实施例具体进行说明。
参考图1所示,为本发明实施例公开的一种数据处理方法的流程示意图,该数据处理方法主要包括如下步骤:
步骤S101:创建带有父线程parentThread的属性的子线程childThread。
在步骤S101中,创建当前线程Thread的子类ParentAwareThread,该ParentAwareThread类携带一个表示父线程parentThread的类型变量。
在创建子线程childThread时,需将当前线程对象findThread赋值给子线程childThread的父线程parentThread属性。
通过继承当前线程Thread来新建一子类,该子类包含表示父线程对象的属性。创建的子线程都用新的子类来表示。
创建带有父线程parentThread的属性的子线程的具体过程如下:
首先,创建当前线程Thread类的ParentAwareThread子类,其次,基于ParentAwareThread类,创建子线程childThread,然后,将预先获取到的当前线程对象findThread赋值给子线程childThread的父线程parentThread的属性,最后,启动带有父线程parentThread的属性的子线程childThread的执行。
在启动带有父线程parentThread的属性的子线程childThread的执行前,要定义其执行内容。
当前线程对象findThread的获取方式可通过Thread.currentThread()的方式来获取。
步骤S102:基于子线程childThread的父线程parentThread的属性,遍历子线程childThread的上级线程,并判断上级线程是否存在线程局部变量值localValue,若存在,执行步骤S103-步骤S104,若不存在,执行步骤S105。
在步骤S102中,要在下级线程中获取线程局部变量在上级线程中的值,需要通过线程的父线程parentThread属性来遍历上级线程,并检查上级线程是否存在线程局部变量值localValue。
查找上级线程是否有某线程局部变量值时,通过新子类的父线程属性来进行遍历。
在Java语言中,ThreadLocal表示线程局部变量,通过把数据放在线程局部变量ThreadLocal中可以让每个线程创建一个该变量的副本,从而避免并发访问的线程安全问题。线程局部变量值专指线程局部变量中当前线程副本中的值。ThreadLocal提供了T get()的方式来进行线程局部变量值localValue的获取,ThreadLocal提供了set(T value)的方式来进行线程局部变量值localValue的设置。
在上述步骤S102中涉及到判断上级线程是否存在线程局部变量值localValue的过程如下:
基于子线程childThread的父线程parentThread的属性,判断预先获取到的线程对象findThread是否为空值null;若线程对象findThread为空值null,则确定上级线程不存在线程局部变量值localValue;若线程对象findThread不为空值null,则确定上级线程存在线程局部变量值localValue。
为了方便理解上级线程和下级线程之间的关系,这里举例进行说明:
例如,如果线程A创建了线程B,则线程A为线程B的父线程,线程B为线程A的子线程。如果线程B创建了线程C,则线程C为线程A的子孙线程,线程A为线程C的祖先线程。线程C的父线程B和祖先线程A称为线程C的上级线程,线程A的上级线程同时也是线程C的上级线程。线程A的子线程B和线程A的子孙线程C称为线程A的下级线程,线程C的下级线程也是线程A的下级线程。
步骤S103:基于预先获取到的上级线程的线程对象findThread获取线程局部变量值localValue。
Java语言的ThreadLocal类中并不实际保存线程的局部变量值,而是在Thread类中有一个类型为ThreadLocalMap类的threadLocals变量,它用来保存该线程的所有ThreadLocal变量的本地值。但Thread类没有提供对threadLocals的操作,ThreadLocalMap类也没有对外暴露方法,因此需要使用Java的反射机制进行操作来获取线程局部变量值localValue。
基于预先获取到的上级线程的线程对象findThread获取线程局部变量值localValue的具体过程如A1-A7所示。
A1:基于预设的反射机制获取上级线程的线程对象findThread的线程本地变量threadLocals的属性值。
其中,预设的反射机制即为Java反射机制,其核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息
A2:判断线程本地变量threadLocals的属性值是否为空值null。
其中,线程本地变量threadlocals是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到该存储数据。
A3:若线程本地变量threadLocals的属性值为空值null,则生成第二异常信息。
其中,生成第二异常信息表示当前线程对象findThread中没有线程局部变量local的本地值所抛出的异常NoLocalException。
A4:若线程本地变量threadLocals的属性值不为空值null,基于local参数调用线程本地变量threadLocals的属性值得到entry类。
其中,entry类是Java的一个静态内部类,实现Map.Entry<K,V>这个接口,通过entry类可以构成一个单向链表。
A5:判断entry类的属性值是否为空值null。
A6:若entry类的属性值为空值null,则生成第二异常信息。
A7:若entry类的属性值不为空值null,基于预设的反射机制获取线程局部变量值localValue。
步骤S104:基于线程局部变量值localValue进行访问变量操作。
本方案的获取上级线程本地变量值方式,对于应用程序开发使用本装置时调用简单,对应用程序没有侵入性。
为了方便理解基于线程局部变量值localValue进行访问变量操作的过程,这里通过应用场景举例进行说明:
具体应用场景实施例中,当存在多线程的情况下,A线程产生多个子线程,即A线程为父线程,若子线程需要获取A线程的文件对象,该文件对象即为存储于A线程中的线程局部变量,当子线程需要获取该文件对象时,通过访问A线程的线程局部变量得到该文件对象,子线程基于获取到的线程局部变量值localValue访问其父线程的线程局部变量,从而得到该父线程的线程变量中所的文件对象,文件对象中包括文件名等其他与文件相关的携带信息。
步骤S105:则生成第一异常信息,并判断线程对象findThread的类型是否为ParentAwareThread类,若是,则执行步骤S106,若否,则执行步骤S107。
在步骤S105中,生成第一异常信息表示在当前线程对象findThread中没有找到线程局部变量local的局部值时所抛出的异常NoLocalException。
步骤S106:将线程对象findThread设置为父线程parentThread的属性。
步骤S107:确定线程对象findThread为空值null。
本发明实施例中,当多线程环境下子线程获取上级线程局部变量值时,无需对线程父子关系数据结构及线程变量Map对象进行并发访问控制来获取上级线程局部变量值,即,无需额外维护线程父子关系的数据结构及线程变量的Map对象,只需根据线程的父子关系来遍历子线程的上级线程,得到线程局部变量值,从而实现提高多线程环境下,子线程获取上级线程局部变量值的效率的目的。
参考图2,为上述步骤S101中涉及到的创建带有父线程属性的子线程的过程,主要包括如下步骤:
步骤S201:创建当前线程Thread类的ParentAwareThread子类。
步骤S202:基于ParentAwareThread类,创建子线程childThread。
步骤S203:将预先获取到的当前线程对象findThread赋值给子线程childThread的父线程parentThread的属性。
步骤S201-步骤S203的执行原理与上述步骤S101的执行原理一致,可参考,此处不再进行赘述。
本发明实施例中,创建当前线程Thread的ParentAwareThread类,基于ParentAwareThread类,创建子线程childThread,将预先获取到的当前线程对象findThread赋值给子线程childThread的父线程parentThread的属性,实现创建带有父线程parentThread的属性的子线程的目的。
参考图3,为上述步骤S102中涉及到的基于子线程childThread的父线程parentThread属性,遍历子线程childThread的上级线程,并判断上级线程是否存在线程局部变量值localValue的过程,主要包括如下步骤:
步骤S301:基于子线程childThread的父线程parentThread的属性,判断预先获取到的线程对象findThread是否为空值null,若是,执行步骤S302,若否,则执行步骤S303。
步骤S302:则确定上级线程不存在线程局部变量值localValue。
步骤S303:则确定上级线程存在线程局部变量值localValue。
步骤S301-步骤S303的执行原理与上述步骤S102的执行原理一致,可参考,此处不再进行赘述。
本发明实施例中,通过子线程childThread的父线程parentThread的属性,判断预先获取到的线程对象findThread是否为空值null,实现确定上级线程是否存在线程局部变量值localValue的目的。
参考图4,为上述步骤S103中涉及到的基于预先获取到的上级线程的线程对象findThread获取线程局部变量值localValue的过程,主要包括如下步骤:
步骤S401:基于预设的反射机制获取上级线程的线程对象findThread的线程本地变量threadLocals的属性值。
步骤S402:判断线程本地变量threadLocals的属性值是否为空值null,若是,执行步骤S406,若否,执行步骤S403。
步骤S403:基于预先获取到的local参数调用线程本地变量threadLocals的属性值得到entry类。
步骤S404:判断entry类的属性值是否为空值null,若是,执行步骤S406,若否,执行步骤S405。
步骤S405:基于预设的反射机制获取线程局部变量值localValue。
步骤S406:生成第二异常信息。
步骤S401-步骤S406的执行原理与上述步骤S103执行原理一致,可参考,此处不再进行赘述。
本发明实施例中,通过反射机制和上级线程的线程对象findThread获取线程局部变量值localValue,实现得到线程局部变量值localValue的目的。
基于上述实施例图1公开的一种数据处理方法,本发明实施例还对应公开了一种数据处理系统,如图5所示,该系统主要包括创建单元501、遍历单元502、获取单元503和操作单元504。
创建单元501,用于创建带有父线程parentThread的属性的子线程childThread。
遍历单元502,用于基于子线程childThread的父线程parentThread的属性,遍历子线程childThread的上级线程,并判断上级线程是否存在线程局部变量值localValue。
获取单元503,用于若上级线程存在线程局部变量值localValue,基于预先获取到的上级线程的线程对象findThread获取线程局部变量值localValue。
操作单元504,用于基于线程局部变量值localValue进行访问变量操作。
进一步的,创建单元501包括第一创建模块、第二创建模块和第一设置模块。
第一创建模块,用于创建当前线程Thread类的ParentAwareThread子类。
第二创建模块,用于基于ParentAwareThread类,创建子线程childThread。
第一设置模块,用于将预先获取到的当前线程对象findThread赋值给子线程childThread的父线程parentThread的属性。
进一步的,遍历单元502包括第一判断模块、第一确定模块和第二确定模块。
第一判断模块,用于基于子线程childThread的父线程parentThread属性,判断预先获取到的线程对象findThread是否为空值null。
第一确定模块,用于若线程对象findThread为空值null,则确定上级线程不存在线程局部变量值localValue。
第二确定模块,用于若线程对象findThread不为空值null,则确定上级线程存在线程局部变量值localValue。
进一步的,还包括判断单元、设置单元和确定单元。
判断单元,若所述上级线程不存在线程局部变量值localValue,则生成第一异常信息,并判断线程对象findThread的类型是否为ParentAwareThread类。
设置单元,用于若线程对象findThread的类型为ParentAwareThread类,将线程对象findThread设置为父线程parentThread的属性;
确定单元,用于若线程对象findThread的类型不为ParentAwareThread类,确定线程对象findThread为空值null。
进一步的,获取单元503包括第一获取模块、第一判断模块、第一生成模块、调用模块、第二判断模块、第二生成模块和第二获取模块。
第一获取模块,用于基于预设的反射机制获取线程对象findThread的线程本地变量threadLocals的属性值。
第一判断模块,用于判断线程本地变量threadLocals的属性值是否为空值null。
第一生成模块,若线程本地变量threadLocals的属性值为空值null,则生成第二异常信息。
调用模块,用于若线程本地变量threadLocals的属性值不为空值null,基于预先获取到的local参数调用线程本地变量threadLocals的属性值得到entry类。
第二判断模块,用于判断entry类的属性值是否为空值null。
第二生成模块,用于若entry类的属性值为空值null,则生成所述第二异常信息。
第二获取模块,用于若entry类的属性值不为空值null,基于预设的反射机制获取线程局部变量值localValue。
本发明实施例中,当多线程环境下子线程获取上级线程局部变量值时,无需对线程父子关系数据结构和线程变量的Map对象进行并发访问控制来获取上级线程局部变量值,即,无需额外维护线程父子关系的数据结构及线程变量的Map对象,只需根据线程的父子关系来遍历子线程的上级线程,得到线程局部变量值,从而实现提高多线程环境下,子线程获取上级线程局部变量值的效率的目的。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于系统类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明各实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种数据处理方法,其特征在于,所述方法包括:
创建带有父线程parentThread的属性的子线程childThread;
基于所述子线程childThread的父线程parentThread的属性,遍历所述子线程childThread的上级线程,并判断所述上级线程是否存在线程局部变量值localValue;
若所述上级线程存在所述线程局部变量值localValue,基于预先获取到的所述上级线程的线程对象findThread获取所述线程局部变量值localValue;
基于所述线程局部变量值localValue进行访问变量操作。
2.根据权利要求1所述的方法,其特征在于,所述创建带有父线程parentThread的属性的子线程childThread,包括:
创建当前线程Thread类的ParentAwareThread子类;
基于所述ParentAwareThread类,创建子线程childThread;
将预先获取到的当前线程对象findThread赋值给所述子线程childThread的父线程parentThread的属性。
3.根据权利要求1所述的方法,其特征在于,所述基于所述子线程childThread的父线程parentThread的属性,遍历所述子线程childThread的上级线程,并判断所述上级线程是否存在线程局部变量值localValue,包括:
基于所述子线程childThread的父线程parentThread的属性,判断预先获取到的线程对象findThread是否为空值null;
若所述线程对象findThread为空值null,则确定所述上级线程不存在线程局部变量值localValue;
若所述线程对象findThread不为空值null,则确定所述上级线程存在所述线程局部变量值localValue。
4.根据权利要求1所述的方法,其特征在于,还包括:
若所述上级线程不存在所述线程局部变量值localValue,则生成第一异常信息,并判断所述线程对象findThread的类型是否为ParentAwareThread类;
若所述线程对象findThread的类型为ParentAwareThread类,将所述线程对象findThread设置为父线程parentThread的属性;
若所述线程对象findThread的类型不为所述ParentAwareThread类,确定所述线程对象findThread为空值null。
5.根据权利要求1所述的方法,其特征在于,所述基于预先获取到的所述上级线程的线程对象findThread获取所述线程局部变量值localValue,包括:
基于预设的反射机制获取所述上级线程的线程对象findThread的线程本地变量threadLocals的属性值;
判断所述线程本地变量threadLocals的属性值是否为空值null;
若所述线程本地变量threadLocals的属性值为空值null,则生成第二异常信息;
若所述线程本地变量threadLocals的属性值不为空值null,基于预先获取到的local参数调用所述线程本地变量threadLocals的属性值得到entry类;
判断所述entry类的属性值是否为空值null;
若所述entry类的属性值为空值null,则生成所述第二异常信息;
若所述entry类的属性值不为空值null,基于所述预设的反射机制获取所述线程局部变量值localValue。
6.一种数据处理系统,其特征在于,所述系统包括:
创建单元,用于创建带有父线程parentThread的属性的子线程childThread;
遍历单元,用于基于所述子线程childThread的父线程parentThread的属性,遍历所述子线程childThread的上级线程,并判断所述上级线程是否存在线程局部变量值localValue;
获取单元,用于若所述上级线程存在所述线程局部变量值localValue,基于预先获取到的所述上级线程的线程对象findThread获取所述线程局部变量值localValue;
操作单元,用于基于所述线程局部变量值localValue进行访问变量操作。
7.根据权利要求6所述的系统,其特征在于,所述创建单元,包括:
第一创建模块,用于创建当前线程Thread类的ParentAwareThread子类;
第二创建模块,用于基于所述ParentAwareThread类,创建子线程childThread;
第一设置模块,用于将预先获取到的当前线程对象findThread的属性赋值给所述子线程childThread的父线程parentThread的属性。
8.根据权利要求6所述的系统,其特征在于,所述遍历单元,包括:
第一判断模块,用于基于所述子线程childThread的父线程parentThread的属性,判断预先获取到的线程对象findThread是否为空值null;
第一确定模块,用于若所述线程对象findThread为空值null,则确定所述上级线程不存在线程局部变量值localValue;
第二确定模块,用于若所述线程对象findThread不为空值null,则确定所述上级线程存在所述线程局部变量值localValue。
9.根据权利要求6所述的系统,其特征在于,还包括:
判断单元,用于若所述上级线程不存在所述线程局部变量值localValue,则生成第一异常信息,并判断所述线程对象findThread的类型是否为ParentAwareThread类;
设置单元,用于若所述线程对象findThread的类型为ParentAwareThread类,将所述线程对象findThread设置为父线程parentThread的属性;
确定单元,用于若所述线程对象findThread的类型不为所述ParentAwareThread类,确定所述线程对象findThread为空值null。
10.根据权利要求6所述的系统,其特征在于,所述获取单元,包括:
第一获取模块,用于基于预设的反射机制获取所述上级线程的线程对象findThread的线程本地变量threadLocals的属性值;
第一判断模块,用于判断所述线程本地变量threadLocals的属性值是否为空值null;
第一生成模块,用于若所述线程本地变量threadLocals的属性值为空值null,则生成第二异常信息;
调用模块,用于若所述线程本地变量threadLocals的属性值不为空值null,基于预先获取到的local参数调用所述线程本地变量threadLocals的属性值得到entry类;
第二判断模块,用于判断所述entry类的属性值是否为空值null;
第二生成模块,用于若所述entry类的属性值为空值null,则生成所述第二异常信息;
第二获取模块,用于若所述entry类的属性值不为空值null,基于所述预设的反射机制获取所述线程局部变量值localValue。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110850139.5A CN113485839A (zh) | 2021-07-27 | 2021-07-27 | 一种数据处理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110850139.5A CN113485839A (zh) | 2021-07-27 | 2021-07-27 | 一种数据处理方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113485839A true CN113485839A (zh) | 2021-10-08 |
Family
ID=77944043
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110850139.5A Pending CN113485839A (zh) | 2021-07-27 | 2021-07-27 | 一种数据处理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113485839A (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010022635A1 (zh) * | 2008-09-01 | 2010-03-04 | 中兴通讯股份有限公司 | 多线程通讯程序中防止线程吊死的方法 |
CN105930219A (zh) * | 2016-04-22 | 2016-09-07 | 浙江工业大学 | 一种自定义的多线程管控的通信方法 |
-
2021
- 2021-07-27 CN CN202110850139.5A patent/CN113485839A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010022635A1 (zh) * | 2008-09-01 | 2010-03-04 | 中兴通讯股份有限公司 | 多线程通讯程序中防止线程吊死的方法 |
CN105930219A (zh) * | 2016-04-22 | 2016-09-07 | 浙江工业大学 | 一种自定义的多线程管控的通信方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3670278B2 (ja) | 順序付けられた探索オブジェクトを使用する共有ライブラリ探索方法およびシステム | |
AU2019200748B2 (en) | Immutable object types | |
US9767007B2 (en) | Efficient method data recording | |
US20050076046A1 (en) | Combining data descriptions | |
CN108614702B (zh) | 字节码优化方法及装置 | |
US20240037264A1 (en) | Systems and methods for providing network-based permissioning using security node hash identifiers | |
JP5424062B2 (ja) | アクセス制御システム、アクセス制御方法、及び記憶媒体 | |
US20080168311A1 (en) | Configuration debugging comparison | |
CN113849177A (zh) | 一种全局数据状态管理方法、装置、电子设备及存储介质 | |
CN111198678A (zh) | 一种生成GraphQL前端操作接口的方法及装置 | |
CN113485839A (zh) | 一种数据处理方法及系统 | |
JP2014504469A (ja) | ネットワーク要素の構成管理 | |
CN116126330A (zh) | 访问请求处理方法、装置、计算机设备和存储介质 | |
US8560572B2 (en) | System for lightweight objects | |
US9026985B2 (en) | Dynamically configurable model-to-model transformation engine | |
US20140196015A1 (en) | Declaration of lifetime of resource reference | |
US8656410B1 (en) | Conversion of lightweight object to a heavyweight object | |
CN106775629B (zh) | 搜索文件生成方法及装置 | |
CN117372182B (zh) | 一种基于快速开发持久层代码辅助方法的保险管理系统 | |
CN111158701B (zh) | 库模块发布方法、装置、设备及存储介质 | |
US8943471B2 (en) | Initialization safety | |
US9058339B2 (en) | Source control inheritance locking | |
US20240354174A1 (en) | Data construction system and data construction method | |
CN113792047A (zh) | 对象与字典互映射方法及装置 | |
JPH04101225A (ja) | オブジェクト指向エキスパートシステムにおけるスロットアクセス方法 |
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 |