CN112540840A - 一种高效的基于Java多线程和反射的任务执行方法 - Google Patents
一种高效的基于Java多线程和反射的任务执行方法 Download PDFInfo
- Publication number
- CN112540840A CN112540840A CN202011529257.8A CN202011529257A CN112540840A CN 112540840 A CN112540840 A CN 112540840A CN 202011529257 A CN202011529257 A CN 202011529257A CN 112540840 A CN112540840 A CN 112540840A
- Authority
- CN
- China
- Prior art keywords
- class
- thread
- public
- java
- reflection
- 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
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Abstract
本发明涉及JAVA多线程技术领域,尤其涉及一种高效的基于Java多线程和反射的任务执行方法,本发明首先通过Java开启多线程,具体通过继承Thread类或实现Runnable接口或在函数体开启;然后在多线程开启运行时构造任意一个类的对象,在运行时判断对象所属的类型,并且获取在运行时对象的成员变量和方法信息,然后在运行时调用对象的方法;在构造任意一个类的对象时通过sql的方式进行执行,通过对所有任务的执行时间进行汇总,耗时最长的任务单独建立线程异步处理,然后将其他各个子任务进行划分,每个线程处理多个子任务,单子任务处理总时间不超过最长任务时间。该方法任务执行总时间由原来的各个子任务时间和,优化为最长任务时间。大大优化了任务执行效率。
Description
技术领域
本发明涉及JAVA多线程技术领域,尤其涉及一种高效的基于Java多线程和反射的任务执行方法。
背景技术
线程是jvm调度的最小单元,也叫做轻量级进程,进程是由线程组成,线程拥有私有的程序技术器以及栈,并且能够访问堆中的共享资源。这里提出一个问题,为什么要用多线程?有一下几点,首先,随着cpu核心数的增加,计算机硬件的并行计算能力得到提升,而同一个时刻一个线程只能运行在一个cpu上,那么计算机的资源被浪费了,所以需要使用多线程。其次,也是为了提高系统的响应速度,如果系统只有一个线程可以执行,那么当不同用户有不同的请求时,由于上一个请求没处理完,那么其他的用户必定需要在一个队列中等待,大大降低响应速度,所以需要多线程。
Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。比较常见的是通过多线程处理数据,但是对于无法直接通过方法调用情况,决定采用多线程与反射共有的方式进行数据指标处理。
发明内容
有鉴于此,本发明的目的是提供一种高效的基于Java多线程和反射的任务执行方法,。
本发明提供了一种高效的基于Java多线程和反射的任务执行方法,具体按以下步骤执行:S1:首先通过Java开启多线程,具体通过继承Thread类或实现Runnable接口或在函数体开启;
S2:然后在多线程开启运行时构造任意一个类的对象,在运行时判断对象所属的类型,并且获取在运行时对象的成员变量和方法信息,然后在运行时调用对象的方法;在步骤S2中返回一个Method对象,反映此Class对象所表示的类或接口的指定公共成员方法;
通过public Method[]getMethods()返回一个包含某些Method对象的数组,反映此Class对象所表示的类或接口的公共member方法;
通过public MethodgetDeclaredMethod(Stringname,Class<?>...parameterTypes)返回一个Method对象,该对象反映此Class对象所表示的类或接口的指定已声明方法;
通过public Method[]getDeclaredMethods()返回Method对象的一个数组,这些对象反映此Class对象表示的类或接口声明的所有方法,包括公共、保护、有方法,但不包括继承的方法。
进一步,获取类型的对象的具有3种方式,具体为调用getClass、运用.class语法和运用static method Class.forName()。
进一步,在获取对象时,具体通过返回一个Field对象,反映此Class对象所表示的类或接口的指定公共成员字段,通过public Field[]getFields()返回一个包含某些Field对象的数组,这些对象反映此Class对象所表示的类或接口的所有可访问公共字段;
通过public FieldgetDeclaredField(Stringname)返回一个Field对象,该对象反映此Class对象所表示的类或接口的指定已声明字段;
再通过public Field[]getDeclaredFields()返回Field对象的一个数组,这些对象反映此Class对象所表示的类或接口所声明的所有字段。
进一步,
进一步,在步骤S2中对象获取Constructor的方法;
通过public Constructor<T>getConstructor(Class<?>...parameterTypes)返回一个Constructor对象,反映此Class对象所表示的类的指定公共构造方法;
然后通过public Constructor<?>[]getConstructors()返回一个包含某些Constructor对象的数组,这些对象反映此Class对象所表示的类的所有公共构造方法;
通过public Constructor<T>getDeclaredConstructor(Class<?>...parameterTypes)
返回一个Constructor对象,该对象反映此Class对象所表示的类或接口的指定构造方法。
S3:在构造任意一个类的对象时通过sql的方式进行执行,通过对所有任务的执行时间进行汇总,耗时最长的任务单独建立线程异步处理,然后将其他各个子任务进行划分,每个线程处理多个子任务,单子任务处理总时间不超过最长任务时间。
进一步,在步骤S1中,
S2.1:继承Thread类中,定义bai一个继承自Java.lang.Thread类的du类A;
S2.2:覆盖zhiA类Thread类中的run方法;
S2.3:编写需要在run方法中执行的操作:run方法中的代码,线程执行体。
S2.4:在main方法的线程中,创建一个线程对象并启动线程;
S2.5:创建线程类对象A类,调用线程对象的start方法启动一个线程。
进一步,在步骤S1中实现Runnable接口,首先定义在java.lang.Runnable接口中实现非线程类A,
S3.1:覆盖A类Runnable接口中的run方法;
S3.2:然后编写需要在run方法中执行的操作,具体是在run方法中,线程执行;
S3.3:在main方法的线程中,创建一个线程对象并启动线程;
S3.4:创建线程类对象,然后调用线程对象的start方法。
本发明的一种高效的基于Java多线程和反射的任务执行方法的有益效果:该方法主要解决高并发的情况下,系统处理速度慢,拖慢业务处理流程慢的问题,通过对所有任务的执行时间进行汇总,耗时最长的任务单独建立线程异步处理。然后将其他各个子任务进行划分,每个线程处理多个子任务,单子任务处理总时间不超过最长任务时间,任务执行总时间由原来的各个子任务时间和,优化为最长任务时间。大大优化了任务执行效率。
附图说明
图1是本发明的任务执行流程图;
图2是本发明的串行所有任务执行时间图;
图3是本发明的并行后为最长任务执行时间图;
具体实施方式
以下将结合附图和具体实施例对本发明进行详细说明,显然,所描述的实施例仅仅只是本申请一部分实施例,而不是全部的实施例,基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
如图1-3所示,本发明的一种高效的基于Java多线程和反射的任务执行方法,具体按以下步骤执行:
S1:首先通过Java开启多线程,具体通过继承Thread类或实现Runnable接口或在函数体开启;
S2:然后在多线程开启运行时构造任意一个类的对象,在运行时判断对象所属的类型,并且获取在运行时对象的成员变量和方法信息,然后在运行时调用对象的方法;
S3:在构造任意一个类的对象时通过sql的方式进行执行,通过对所有任务的执行时间进行汇总,耗时最长的任务单独建立线程异步处理,然后将其他各个子任务进行划分,每个线程处理多个子任务,单子任务处理总时间不超过最长任务时间。
本实施例中,在步骤S1中,
S2.1:继承Thread类中,定义bai一个继承自Java.lang.Thread类的du类A;
S2.2:覆盖zhiA类Thread类中的run方法;
S2.3:编写需要在run方法中执行的操作:run方法中的代码,线程执行体。
S2.4:在main方法的线程中,创建一个线程对象并启动线程;
S2.5:创建线程类对象A类,调用线程对象的start方法启动一个线程。继承Thread类中可以将线程类抽象出来,当需要使用抽象工厂模式设计时使多线程同步。
本实施例中,在步骤S1中实现Runnable接口,首先定义在java.lang.Runnable接口中实现非线程类A,
S3.1:覆盖A类Runnable接口中的run方法;
S3.2:然后编写需要在run方法中执行的操作,具体是在run方法中,线程执行;
S3.3:在main方法的线程中,创建一个线程对象并启动线程;
S3.4:创建线程类对象,然后调用线程对象的start方法。实现Runnable接口适合多个相同的程序代码的线程去处理同一个资源,可以避免Java中的单继承的限制,增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。
本实施例中,在步骤S2中获取类型的对象的具有3种方式,具体为调用getClass、运用.class语法和运用static method Class.forName()。
本实施例中,在获取对象时,具体通过返回一个Field对象,反映此Class对象所表示的类或接口的指定公共成员字段,通过public Field[]getFields()返回一个包含某些Field对象的数组,这些对象反映此Class对象所表示的类或接口的所有可访问公共字段;
通过public FieldgetDeclaredField(Stringname)返回一个Field对象,该对象反映此Class对象所表示的类或接口的指定已声明字段;
再通过public Field[]getDeclaredFields()返回Field对象的一个数组,这些对象反映此Class对象所表示的类或接口所声明的所有字段。
本实施例中,在步骤S2中返回一个Method对象,反映此Class对象所表示的类或接口的指定公共成员方法;
通过public Method[]getMethods()返回一个包含某些Method对象的数组,反映此Class对象所表示的类或接口的公共member方法;
通过public MethodgetDeclaredMethod(Stringname,Class<?>...parameterTypes)返回一个Method对象,该对象反映此Class对象所表示的类或接口的指定已声明方法;
通过public Method[]getDeclaredMethods()返回Method对象的一个数组,这些对象反映此Class对象表示的类或接口声明的所有方法,包括公共、保护、有方法,但不包括继承的方法。
本实施例中,在步骤S2中对象获取Constructor的方法;
通过public Constructor<T>getConstructor(Class<?>...parameterTypes)返回一个Constructor对象,反映此Class对象所表示的类的指定公共构造方法;
然后通过public Constructor<?>[]getConstructors()返回一个包含某些Constructor对象的数组,这些对象反映此Class对象所表示的类的所有公共构造方法;
通过public Constructor<T>getDeclaredConstructor(Class<?>...parameterTypes)
返回一个Constructor对象,该对象反映此Class对象所表示的类或接口的指定构造方法。
以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。本发明未详细描述的技术、形状、构造部分均为公知技术。
Claims (7)
1.一种高效的基于Java多线程和反射的任务执行方法,具体按以下步骤执行:
S1:首先通过Java开启多线程,具体通过继承Thread类或实现Runnable接口或在函数体开启;
S2:然后在多线程开启运行时构造任意一个类的对象,在运行时判断对象所属的类型,并且获取在运行时对象的成员变量和方法信息,然后在运行时调用对象的方法;
S3:在构造任意一个类的对象时通过sql的方式进行执行,通过对所有任务的执行时间进行汇总,耗时最长的任务单独建立线程异步处理,然后将其他各个子任务进行划分,每个线程处理多个子任务,单子任务处理总时间不超过最长任务时间。
2.根据权利要求1所述的一种高效的基于Java多线程和反射的任务执行方法,其特征在于:在步骤S1中,
S2.1:继承Thread类中,定义bai一个继承自Java.lang.Thread类的du类A;
S2.2:覆盖zhiA类Thread类中的run方法;
S2.3:编写需要在run方法中执行的操作:run方法中的代码,线程执行体。
S2.4:在main方法的线程中,创建一个线程对象并启动线程;
S2.5:创建线程类对象A类,调用线程对象的start方法启动一个线程。
3.根据权利要求1所述的一种高效的基于Java多线程和反射的任务执行方法,其特征在于:在步骤S1中实现Runnable接口,首先定义在java.lang.Runnable接口中实现非线程类A,
S3.1:覆盖A类Runnable接口中的run方法;
S3.2:然后编写需要在run方法中执行的操作,具体是在run方法中,线程执行;
S3.3:在main方法的线程中,创建一个线程对象并启动线程;
S3.4:创建线程类对象,然后调用线程对象的start方法。
4.根据权利要求1所述的一种高效的基于Java多线程和反射的任务执行方法,其特征在于:在步骤S2中获取类型的对象的具有3种方式,具体为调用getClass、运用.class语法和运用static method Class.forName()。
5.根据权利要求4所述的一种高效的基于Java多线程和反射的任务执行方法,其特征在于:在获取对象时,具体通过返回一个Field对象,反映此Class对象所表示的类或接口的指定公共成员字段,通过public Field[]getFields()返回一个包含某些Field对象的数组,这些对象反映此Class对象所表示的类或接口的所有可访问公共字段;
通过public FieldgetDeclaredField(Stringname)返回一个Field对象,该对象反映此Class对象所表示的类或接口的指定已声明字段;
再通过public Field[]getDeclaredFields()返回Field对象的一个数组,这些对象反映此Class对象所表示的类或接口所声明的所有字段。
6.根据权利要求1所述的一种高效的基于Java多线程和反射的任务执行方法,其特征在于:在步骤S2中返回一个Method对象,反映此Class对象所表示的类或接口的指定公共成员方法;
通过public Method[]getMethods()返回一个包含某些Method对象的数组,反映此Class对象所表示的类或接口的公共member方法;
通过public MethodgetDeclaredMethod(Stringname,Class<?>...parameterTypes)返回一个Method对象,该对象反映此Class对象所表示的类或接口的指定已声明方法;
通过public Method[]getDeclaredMethods()返回Method对象的一个数组,这些对象反映此Class对象表示的类或接口声明的所有方法,包括公共、保护、有方法,但不包括继承的方法。
7.根据权利要求1所述的一种高效的基于Java多线程和反射的任务执行方法,其特征在于:在步骤S2中对象获取Constructor的方法;
通过public Constructor<T>getConstructor(Class<?>...parameterTypes)返回一个Constructor对象,反映此Class对象所表示的类的指定公共构造方法;
然后通过public Constructor<?>[]getConstructors()返回一个包含某些Constructor对象的数组,这些对象反映此Class对象所表示的类的所有公共构造方法;
通过public Constructor<T>getDeclaredConstructor(Class<?>...parameterTypes)
返回一个Constructor对象,该对象反映此Class对象所表示的类或接口的指定构造方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011529257.8A CN112540840A (zh) | 2020-12-22 | 2020-12-22 | 一种高效的基于Java多线程和反射的任务执行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011529257.8A CN112540840A (zh) | 2020-12-22 | 2020-12-22 | 一种高效的基于Java多线程和反射的任务执行方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112540840A true CN112540840A (zh) | 2021-03-23 |
Family
ID=75017110
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011529257.8A Pending CN112540840A (zh) | 2020-12-22 | 2020-12-22 | 一种高效的基于Java多线程和反射的任务执行方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112540840A (zh) |
-
2020
- 2020-12-22 CN CN202011529257.8A patent/CN112540840A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10545789B2 (en) | Task scheduling for highly concurrent analytical and transaction workloads | |
US7406699B2 (en) | Enhanced runtime hosting | |
US9417935B2 (en) | Many-core process scheduling to maximize cache usage | |
US7280558B1 (en) | Asynchronous pattern | |
US8112751B2 (en) | Executing tasks through multiple processors that process different portions of a replicable task | |
JP2829078B2 (ja) | プロセス分散方法 | |
Willhalm et al. | Putting intel® threading building blocks to work | |
JP2012511204A (ja) | リソースを最適化するためのタスク再編成方法 | |
US20090265696A1 (en) | Just-ahead-of-time compilation | |
WO2012028213A1 (en) | Re-scheduling workload in a hybrid computing environment | |
EP2446357A1 (en) | High-throughput computing in a hybrid computing environment | |
US20170192762A1 (en) | Declarative programming model with a native programming language | |
Nikhil | A multithreaded implementation of Id using P-RISC graphs | |
US9652301B2 (en) | System and method providing run-time parallelization of computer software using data associated tokens | |
CN111459622A (zh) | 调度虚拟cpu的方法、装置、计算机设备和存储介质 | |
Pufek et al. | Achieving Efficient Structured Concurrency through Lightweight Fibers in Java Virtual Machine | |
EP2375326A1 (en) | Executing operations via asynchronous programming model | |
CN112540840A (zh) | 一种高效的基于Java多线程和反射的任务执行方法 | |
Lu et al. | Developing a concurrent service orchestration engine in ccr | |
Nair | An Analytical study of Performance towards Task-level Parallelism on Many-core systems using Java API | |
US20190310857A1 (en) | Method of Concurrent Instruction Execution and Parallel Work Balancing in Heterogeneous Computer Systems | |
Francis et al. | Implementation of parallel clustering algorithms using Join and Fork model | |
US11966726B2 (en) | Operating system (OS) scheduler and compiler for code generation optimization in a (simultaneous multi-threading) SMT enabled CPU | |
Singla et al. | Task Scheduling Algorithms for Grid Computing with Static Jobs: A Review | |
Blagojevic et al. | Scheduling dynamic parallelism on accelerators |
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 |