CN113703987B - Java任务死锁检测方法及装置 - Google Patents
Java任务死锁检测方法及装置 Download PDFInfo
- Publication number
- CN113703987B CN113703987B CN202111073277.3A CN202111073277A CN113703987B CN 113703987 B CN113703987 B CN 113703987B CN 202111073277 A CN202111073277 A CN 202111073277A CN 113703987 B CN113703987 B CN 113703987B
- Authority
- CN
- China
- Prior art keywords
- stack
- lock
- task
- tasks
- loop
- 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.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 57
- 238000000034 method Methods 0.000 claims abstract description 13
- 238000004590 computer program Methods 0.000 claims description 16
- 238000003860 storage Methods 0.000 claims description 7
- 230000002159 abnormal effect Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 10
- 230000009471 action Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 230000005856 abnormality Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000003825 pressing Methods 0.000 description 2
- 230000002265 prevention Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种Java任务死锁检测方法及装置,可用于金融领域,其中方法包括:获得多个任务的琐资源信息,其中每个任务对应的琐资源信息包括该任务的持有锁和申请琐;根据所述多个任务的琐资源信息,采用栈结构进行回路判断;根据判断的结果,进行Java任务死锁检测。本发明可以进行Java任务死锁检测,避免死锁发生,保证系统安全性和可靠性。
Description
技术领域
本发明涉及金融领域,尤其涉及Java任务死锁检测方法及装置。需要说明的是,本发明Java任务死锁检测方法和装置可用于金融领域,也可用于除金融领域之外的任意领域,本发明Java任务死锁检测方法和装置的应用领域不做限定。
背景技术
Java并发编程时,经常会出现两个或两个以上的任务(线程)在执行过程中,因争夺锁资源而互相等待的现象,即死锁。死锁一旦产生,重则会将整个Java应用摧毁。
现有技术中通常是在死锁发生后进行检测并提示,难以避免死锁的发生,无法保证系统的安全性和可靠性。
因此,亟需一种可以克服上述问题的Java任务死锁检测方案。
发明内容
本发明实施例提供一种Java任务死锁检测方法,用以进行Java任务死锁检测,避免死锁发生,保证系统安全性和可靠性,该方法包括:
获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;
根据所述多个任务的锁资源信息,采用栈结构进行回路判断;
根据判断的结果,进行Java任务死锁检测。
本发明实施例提供一种Java任务死锁检测装置,用以进行Java任务死锁检测,避免死锁发生,保证系统安全性和可靠性,该装置包括:
信息获得模块,用于获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;
回路判断模块,用于根据所述多个任务的锁资源信息,采用栈结构进行回路判断;
死锁检测模块,用于根据判断的结果,进行Java任务死锁检测。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述Java任务死锁检测方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述Java任务死锁检测方法的计算机程序。
本发明实施例通过获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;根据所述多个任务的锁资源信息,采用栈结构进行回路判断;根据判断的结果,进行Java任务死锁检测。本发明实施例根据多个任务的锁资源信息,采用栈结构进行回路判断,并根据判断的结果进行Java任务死锁检测,从而可以有效避免死锁发生,保证系统安全性和可靠性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施例中Java任务死锁检测方法示意图;
图2~图4为本发明具体实施例中Java任务死锁检测方法示意图;
图5为本发明实施例中Java任务死锁检测装置结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
如前所述,Java的并发编程时,编码不当很可能会造成死锁,死锁一旦产生,重则会将整个java应用摧毁。目前jvm只提供了死锁发生后的检测API,并未提供死锁预检测机制。Java中预防死锁的办法一般是通过锁超时来避免,也就是当任务1请求b锁时,如果超过了设置的时间,则抛出异常(破坏回路)。该方法的缺点是如果不是死锁造成的等待,该超时锁也会抛出“超时异常”。
为了进行Java任务死锁检测,避免死锁发生,保证系统安全性和可靠性,本发明实施例提供一种Java任务死锁检测方法,如图1所示,该方法可以包括:
步骤101、获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;
步骤102、根据所述多个任务的锁资源信息,采用栈结构进行回路判断;
步骤103、根据判断的结果,进行Java任务死锁检测。
由图1所示可以得知,本发明实施例通过获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;根据所述多个任务的锁资源信息,采用栈结构进行回路判断;根据判断的结果,进行Java任务死锁检测。本发明实施例根据多个任务的锁资源信息,采用栈结构进行回路判断,并根据判断的结果进行Java任务死锁检测,从而可以有效避免死锁发生,保证系统安全性和可靠性。
实施例中,获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁。根据所述多个任务的锁资源信息,采用栈结构进行回路判断。
本实施例中,根据所述多个任务的锁资源信息,采用栈结构进行回路判断,包括:
将所述多个任务中当前任务的持有锁和申请锁依次压入栈中;
循环进行如下操作直至遍历全部任务:弹出栈顶的申请锁,在多个任务中选出持有锁为弹出的申请锁的任务,将选出的任务对应的申请锁压入栈中;
对栈顶和次栈顶进行比较;
根据比较的结果进行回路判断。
本实施例中,根据比较的结果进行回路判断,包括:
若栈顶和次栈顶相同,则消除栈顶和次栈顶;
在消除栈顶和次栈顶之后,若栈为空则判断为回路。
实施例中,根据判断的结果,进行Java任务死锁检测。
本实施例中,根据判断的结果,进行Java任务死锁检测,包括:若判断为回路,则发出死锁异常报警信息。
下面结合具体实施例,说明本发明实施例中Java任务死锁检测的具体应用。假设有两个并发任务:任务1和任务2。
任务1伪代码如下:
Lock(a)
Dosometing()
Lock(b)
Dosometing2()
Unlock(b)
Unlock(a)
任务2伪代码如下:
Lock(b)
Dosometing()
Lock(a)
Dosometing2()
Unlock(a)
Unlock(b)
上述锁资源a和b的请求顺序;当任务1和任务2并发运行时,如果恰好处在如图2的状态时,则会造成死锁,也即两个任务都在等待对方释放锁资源。因此,可以将锁写入“锁资源信息”中,状态为“请求”并进行于检查判断,如果构成回路则抛出“死锁异常”。将对应的锁更新为“持有”,然后将对应的锁删除。
具体的,可以将任务1伪代码改造如下:
seq();
Lock(a)
hold();
Dosometing()
seq()
Lock(b)
hold()
Dosometing2()
Unlock(b)
clear()
Unlock(a)
clear()
具体的,首先在申请锁前后增加seq和hold动作,在释放锁后增加clear动作。分别记录任务和锁的相关信息。其次在每次申请锁时,再引入“运行期死锁预检测”动作,当任务以及锁信息构成循环依赖时,在当前的任务里抛出“死锁异常”(破坏回路),从而避免死锁的发生。对于使用juc的Lock的代码,可以通过扩展juc的lock类透明地将seq,hold,clear动作嵌入进去,如下所示:
其中,在seq动作中的进行运行期的Java任务死锁检测。以3个任务的死锁为例说明死锁的检测预防。假设任务1持有a锁e锁,申请b锁;任务2持有b锁,申请c锁;任务3持有c锁,申请a锁”,如表1和图3所示。
表1
任务名 | 持有锁 | 申请锁 | 持有锁->申请锁 | 任务说明 |
任务1 | a,e | b | A->b,e->b | 任务1持有a锁e锁,申请b锁 |
任务2 | b | c | B->c | 任务2持有b锁,申请c锁 |
任务3 | c | a | C->a | 任务3持有c锁,申请a锁 |
在进行Java任务死锁检测时,将3个任务的锁资源信息采用栈结构存入栈中并进行回路判断,如图4所示,具体如下:
S1:将当前任务1中的持有锁和申请锁压入栈中;
S2:弹出栈顶,搜索持有锁等于栈顶(b锁)任务,并将该任务对应的申请锁压栈;
S3:弹出栈顶,搜索持有锁等于栈顶(c锁)任务,并将该任务对应的申请锁压栈;
S4:比较栈顶和次栈顶,如果相同则消除,当栈为空时,则构成了回路。
预检查死锁算法如下所示:
本发明实施例通过引入死锁检测机制,在多线程编程时可以避免死锁的发生,提升了系统的安全性和可靠性。
基于同一发明构思,本发明实施例还提供了一种Java任务死锁检测装置,如下面的实施例所述。由于这些解决问题的原理与Java任务死锁检测方法相似,因此Java任务死锁检测装置的实施可以参见方法的实施,重复之处不再赘述。
图5为本发明实施例中Java任务死锁检测装置的结构图,如图5所示,该Java任务死锁检测装置包括:
信息获得模块501,用于获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;
回路判断模块502,用于根据所述多个任务的锁资源信息,采用栈结构进行回路判断;
死锁检测模块503,用于根据判断的结果,进行Java任务死锁检测。
一个实施例中,所述回路判断模块502进一步用于:
将所述多个任务中当前任务的持有锁和申请锁依次压入栈中;
循环进行如下操作直至遍历全部任务:弹出栈顶的申请锁,在多个任务中选出持有锁为弹出的申请锁的任务,将选出的任务对应的申请锁压入栈中;
对栈顶和次栈顶进行比较;
根据比较的结果进行回路判断。
一个实施例中,所述回路判断模块502进一步用于:
若栈顶和次栈顶相同,则消除栈顶和次栈顶;
在消除栈顶和次栈顶之后,若栈为空则判断为回路。
一个实施例中,所述死锁检测模块503进一步用于:
若判断为回路,则发出死锁异常报警信息。
综上所述,本发明实施例通过获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;根据所述多个任务的锁资源信息,采用栈结构进行回路判断;根据判断的结果,进行Java任务死锁检测。本发明实施例根据多个任务的锁资源信息,采用栈结构进行回路判断,并根据判断的结果进行Java任务死锁检测,从而可以有效避免死锁发生,保证系统安全性和可靠性。
基于前述发明构思,本发明还提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现前述Java任务死锁检测方法。
基于前述发明构思,本发明提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现前述Java任务死锁检测方法。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种Java任务死锁检测方法,其特征在于,包括:
获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;
根据所述多个任务的锁资源信息,采用栈结构进行回路判断;
根据判断的结果,进行Java任务死锁检测;
根据所述多个任务的锁资源信息,采用栈结构进行回路判断,包括:
将所述多个任务中当前任务的持有锁和申请锁依次压入栈中;
循环进行如下操作直至遍历全部任务:弹出栈顶的申请锁,在多个任务中选出持有锁为弹出的申请锁的任务,将选出的任务对应的申请锁压入栈中;
对栈顶和次栈顶进行比较;
根据比较的结果进行回路判断;
根据比较的结果进行回路判断,包括:
若栈顶和次栈顶相同,则消除栈顶和次栈顶;
在消除栈顶和次栈顶之后,若栈为空则判断为回路。
2.如权利要求1所述的Java任务死锁检测方法,其特征在于,根据判断的结果,进行Java任务死锁检测,包括:
若判断为回路,则发出死锁异常报警信息。
3.一种Java任务死锁检测装置,其特征在于,包括:
信息获得模块,用于获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;
回路判断模块,用于根据所述多个任务的锁资源信息,采用栈结构进行回路判断;
死锁检测模块,用于根据判断的结果,进行Java任务死锁检测;
所述回路判断模块进一步用于:
将所述多个任务中当前任务的持有锁和申请锁依次压入栈中;
循环进行如下操作直至遍历全部任务:弹出栈顶的申请锁,在多个任务中选出持有锁为弹出的申请锁的任务,将选出的任务对应的申请锁压入栈中;
对栈顶和次栈顶进行比较;
根据比较的结果进行回路判断;
所述回路判断模块进一步用于:
若栈顶和次栈顶相同,则消除栈顶和次栈顶;
在消除栈顶和次栈顶之后,若栈为空则判断为回路。
4.如权利要求3所述的Java任务死锁检测装置,其特征在于,所述死锁检测模块进一步用于:
若判断为回路,则发出死锁异常报警信息。
5.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至2任一所述方法。
6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至2任一所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111073277.3A CN113703987B (zh) | 2021-09-14 | 2021-09-14 | Java任务死锁检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111073277.3A CN113703987B (zh) | 2021-09-14 | 2021-09-14 | Java任务死锁检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113703987A CN113703987A (zh) | 2021-11-26 |
CN113703987B true CN113703987B (zh) | 2024-02-23 |
Family
ID=78660307
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111073277.3A Active CN113703987B (zh) | 2021-09-14 | 2021-09-14 | Java任务死锁检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113703987B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101295266A (zh) * | 2008-06-05 | 2008-10-29 | 华为技术有限公司 | 检测和解除死锁的方法、装置和系统 |
CN103399818A (zh) * | 2013-08-13 | 2013-11-20 | 中国科学技术大学苏州研究院 | 操作系统中的死锁检测方法 |
CN112905372A (zh) * | 2021-02-02 | 2021-06-04 | 浙江大华技术股份有限公司 | 线程的异常诊断方法及装置 |
-
2021
- 2021-09-14 CN CN202111073277.3A patent/CN113703987B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101295266A (zh) * | 2008-06-05 | 2008-10-29 | 华为技术有限公司 | 检测和解除死锁的方法、装置和系统 |
CN103399818A (zh) * | 2013-08-13 | 2013-11-20 | 中国科学技术大学苏州研究院 | 操作系统中的死锁检测方法 |
CN112905372A (zh) * | 2021-02-02 | 2021-06-04 | 浙江大华技术股份有限公司 | 线程的异常诊断方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113703987A (zh) | 2021-11-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7908521B2 (en) | Process reflection | |
US5664088A (en) | Method for deadlock recovery using consistent global checkpoints | |
US10042695B1 (en) | Program exception recovery | |
US20180060568A1 (en) | System And Method Of Dynamically Updating Stack Canaries | |
US20080276025A1 (en) | Lock inference for atomic sections | |
US8875165B2 (en) | Computing device having a DLL injection function, and DLL injection method | |
US7430740B1 (en) | Process group resource manager | |
US20040025164A1 (en) | Detecting deadlocks in multithreaded programs | |
US20070143766A1 (en) | Deadlock detection in a computing environment | |
US5301311A (en) | Control method for preventing incorrect reset of common resource and multicomputer system executing the method | |
US20100262972A1 (en) | Deadlock avoidance | |
CN109117201B (zh) | 一种程序退出的方法及相关设备 | |
US11281441B2 (en) | Method and apparatus for compiling source code object, and computer | |
US8132174B2 (en) | Concurrency management in cluster computing of business applications | |
EP3652667B1 (en) | System and method for detecting malware injected into memory of a computing device | |
US20100037094A1 (en) | Application Failure Recovery | |
US20150019846A1 (en) | System level architecture verification for transaction execution in a multi-processing environment | |
CN113703987B (zh) | Java任务死锁检测方法及装置 | |
US7921329B2 (en) | Worker thread corruption detection and remediation | |
CN107766131B (zh) | 任务调度方法和装置 | |
CN109558249B (zh) | 一种并发操作的控制方法及装置 | |
CN112487010B (zh) | 一种区块链用户数据表更新方法、设备及存储介质 | |
CN115454599A (zh) | 任务处理方法、系统、装置、存储介质以及电子设备 | |
CN110673899A (zh) | 一种程序处理方法及相关设备 | |
US7437612B1 (en) | Postmortem detection of owned mutual exclusion locks |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |