当前位置:网站首页>Concurrent programming - deadlock troubleshooting and handling
Concurrent programming - deadlock troubleshooting and handling
2022-07-05 07:05:00 【Handling Gong】
Preface
I believe many programmers have encountered deadlock in their work , For example, database deadlock 、 Application deadlock . So how do we deal with this situation ? This paper will sort out the relevant ideas and solutions through a simple case , I hope it can help children's shoes in similar situations .
1. What is a deadlock ?
A deadlock is when two or more threads are executing , One caused by competition for resources The phenomenon of waiting for each other , If there is no external force to interfere, they will not be able to push forward , If system resources are sufficient , Process resource requests can be satisfied , The possibility of deadlock is very low , Otherwise, we will be locked in a deadlock due to competing for limited resources .
The main cause of deadlock :
① Insufficient system resources ;
② The recommended sequence of process operation is out of time ;
③ Misallocation of resources ;
2. Handwriting a deadlock case Case study
Above we know what a deadlock is and the conditions under which it occurs , Then let's experience deadlock by writing a case :
public static void main(String[] args) {
final Object objectA = new Object();
final Object objectB = new Object();
new Thread(() -> {
synchronized (objectA) {
System.out.println(" Threads " + Thread.currentThread().getName() + " start-up , hold A lock ...");
try {
TimeUnit.SECONDS.sleep(1L);
synchronized (objectB) {
System.out.println(" Threads " + Thread.currentThread().getName() + " Try to get B lock , success !!");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"A").start();
new Thread(() -> {
synchronized (objectB) {
System.out.println(" Threads " + Thread.currentThread().getName() + " start-up , hold B lock ...");
try {
TimeUnit.SECONDS.sleep(1L);
synchronized (objectA) {
System.out.println(" Threads " + Thread.currentThread().getName() + " Try to get A lock , success !!");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"B").start();
}
You can see , Two threads compete for resources , Causes deadlock , The program is running all the time , Can't end .
3. Deadlock detection
By handwriting deadlock case, Know that there is a deadlock , Then the real production environment cannot locate whether there is a deadlock , For example, I wrote a while(true) {} Infinite loop a block of code .
3.1 Command line troubleshooting
How to locate the deadlock ? It's simple , Use JDK The order that comes with you - jstack Check it out. JVM Stack information for :
① jps - See what's running Java process ;
② jstack process ID;
Through the output information, you can see , Deadlock detected , It also points out the specific number of code lines that cause deadlock .
3.2 Graphical interface troubleshooting
There is another way to troubleshoot deadlocks , It's also JDK A graphical command provided jconsole, Through this command, you can connect to specific Java process , View it graphically .
Two ways , Can locate the location where the deadlock occurs . After positioning , Optimize the program to avoid deadlock ( Avoid the cause of deadlock ).
above , It is the two simplest and most practical methods for checking deadlocks , Encounter program jam in real production environment 、 When there is no response , This way can be used to check whether the deadlock is caused by the non release of a large amount of resources .
边栏推荐
猜你喜欢
how to understand the “model independent.“
Powermanagerservice (I) - initialization
docker安装mysql并使用navicat连接
UTC, GPS time and Tai
All English in the code
Rehabilitation type force deduction brush question notes D2
Use ffmpeg to rotate, flip up and down, and flip horizontally
Sre core system understanding
【MySQL8.0不支持表名大写-对应方案】
Ros2 - function package (VI)
随机推荐
Ros2 - ros2 vs. ros1 (II)
Rehabilitation type force deduction brush question notes D2
About vscode, "code unreachable" will be displayed when calling sendline series functions with pwntools“
你心目中的数据分析 Top 1 选 Pandas 还是选 SQL?
Mipi interface, DVP interface and CSI interface of camera
Technology blog learning website
IPage能正常显示数据,但是total一直等于0
SOC_SD_DATA_FSM
[nvidia] CUDA_ VISIBLE_ DEVICES
Orin two brushing methods
how to understand the “model independent.“
Marvell 88e1515 PHY loopback mode test
Use the Paping tool to detect TCP port connectivity
ROS2——node节点(七)
Edge calculation data sorting
kata container
testing framework
Volcano resource reservation feature
.net core踩坑实践
Empire help