当前位置:网站首页>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 .
边栏推荐
- MySQL (UDF authorization)
- MySQL setting trigger problem
- Sre core system understanding
- Ros2 - Service Service (IX)
- 【MySQL8.0不支持表名大写-对应方案】
- Inftnews | drink tea and send virtual stocks? Analysis of Naixue's tea "coin issuance"
- PHY drive commissioning - phy controller drive (II)
- window navicat连接阿里云服务器mysql步骤及常见问题
- Orin 安装CUDA环境
- PR automatically moves forward after deleting clips
猜你喜欢
随机推荐
docker安装mysql并使用navicat连接
Ros2 - first acquaintance with ros2 (I)
Get class files and attributes by reflection
PHY drive commissioning - phy controller drive (II)
All English in the code
ROS2——ROS2对比ROS1(二)
解读最早的草图-图像翻译工作SketchyGAN
Rehabilitation type force deduction brush question notes D2
程序中的负数存储及类型转换
乐鑫面试流程
An article was opened to test the real situation of outsourcing companies
*P++, (*p) + +, * (p++) differences
LSA Type Explanation - detailed explanation of lsa-2 (type II LSA network LSA) and lsa-3 (type III LSA network Summary LSA)
ROS2——配置开发环境(五)
Orin installs CUDA environment
PHY驱动调试之 --- PHY控制器驱动(二)
Some classic recursion problems
Marvell 88e1515 PHY loopback mode test
Huawei bracelet, how to add medicine reminder?
Orin 安装CUDA环境