当前位置:网站首页>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 .
边栏推荐
- Integer to 8-bit binary explanation (including positive and negative numbers) scope of application -127~+127
- Rehabilitation type force deduction brush question notes D1
- Build a microservice cluster environment locally and learn to deploy automatically
- Markdown syntax
- Mipi interface, DVP interface and CSI interface of camera
- Configuration method and configuration file of SolidWorks GB profile library
- Special training of C language array
- ROS2——配置开发环境(五)
- Orin 安装CUDA环境
- mingling
猜你喜欢
随机推荐
kata container
Dameng database all
PHY驱动调试之 --- PHY控制器驱动(二)
Inftnews | drink tea and send virtual stocks? Analysis of Naixue's tea "coin issuance"
【软件测试】06 -- 软件测试的基本流程
Huawei bracelet, how to add medicine reminder?
三体目标管理笔记
Vant weapp swippecell set multiple buttons
Preemption of CFS scheduling
Steps and FAQs of connecting windows Navicat to Alibaba cloud server MySQL
二分查找(折半查找)
Literacy Ethernet MII interface types Daquan MII, RMII, smii, gmii, rgmii, sgmii, XGMII, XAUI, rxaui
现在有html文件,和用vs制作的mvc(连接了数据库),怎么两个相连?
SRE核心体系了解
SOC_SD_CMD_FSM
LSA Type Explanation - detailed explanation of lsa-2 (type II LSA network LSA) and lsa-3 (type III LSA network Summary LSA)
Ros2 - workspace (V)
Ros2 - function package (VI)
Cookie、Session、JWT、token四者间的区别与联系
namespace