Java死锁编码及定位分析的demo
死锁
死锁是什么
大学课程中的四个要素:
(1)互斥(2)不可抢占(3)循环等待(4)请求保持
也就是下图所描述

产生死锁的主要原因
(1)系统资源不足(2)进程运行推进的顺序不合适(3)资源分配不当
【也就是不满足四要素】
产生死锁代码
package com.atguigu.test_deadlock;
import java.util.concurrent.TimeUnit;
class HoldLock implements Runnable{
private String lockA;
private String lockB;
public HoldLock(String lockA, String lockB) {
this.lockA = lockA;
this.lockB = lockB;
}
@Override
public void run() {
synchronized (lockA){
System.out.println(Thread.currentThread().getName()+"\t自己持有:"+lockA+"\t尝试获得:"+lockB);
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB){
System.out.println(Thread.currentThread().getName()+"\t自己持有:"+lockB+"\t尝试获得:"+lockA);
}
}
}
}
/**
* @author zhudunfeng
* @date 2020/8/20 22:54
* 死锁是指两个或两个以上的进程在执行过程中,
* 因为抢夺资源而造成的一种互相等待的现象,
* 若无外力干预那么它们将无法推进下去
*/
public class DeadLockDemo {
public static void main(String[] args) {
String lockA="lockA";
String lockB="lockB";
new Thread(new HoldLock(lockA, lockB),"ThreadAAA").start();
new Thread(new HoldLock(lockB, lockA),"ThreadBBB").start();
/**
* 怎样定位死锁位置
* linux ps -ef|grep xxx ls -l
* windows下的java运行程序 也有类似ps的查看进程的命令,但是目前我们查看的只是java
* jps= java ps jps -l 查询进程号
* jstack 进行号
*/
}
}
解决与定位死锁
第一步:
jps命令定位进程编号

第二步
jstack找到死锁查看

原文地址
github中的demo
Java死锁编码及定位分析的demo的更多相关文章
- Java:死锁编码及定位分析
Java:死锁编码及定位分析 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 概念 死锁是指两个或多个以上的进程在执行过程中,因争夺资源而造成一种互相等待的现象, ...
- java面试-死锁产生、定位分析和修复
死锁发生:两个或多个线程之间,互相持有对方需要的锁,而永久处于阻塞状态 一.手写死锁代码: public class DeadLockSample extends Thread { private S ...
- 一文学会Java死锁和CPU 100% 问题的排查技巧
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开 工欲善其事,必先利其器 00 本文简介 作为一名搞技术的程序猿或者是攻城狮,想必你应该是对下面这两个问题有所了解,说不定你在 ...
- 【字符编码】Java字符编码详细解答及问题探讨
一.前言 继上一篇写完字节编码内容后,现在分析在Java中各字符编码的问题,并且由这个问题,也引出了一个更有意思的问题,笔者也还没有找到这个问题的答案.也希望各位园友指点指点. 二.Java字符编码 ...
- JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题
JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题 在JAVA下输出文件流,保存成CSV(用UTF-8)文件,怎么处理用EXCEL下是乱码,但是在记事本等其他软件都是正 ...
- Java死锁排查和Java CPU 100% 排查的步骤整理
================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...
- 基于Java 生产者消费者模式(详细分析)
Java 生产者消费者模式详细分析 本文目录:1.等待.唤醒机制的原理2.Lock和Condition3.单生产者单消费者模式4.使用Lock和Condition实现单生产单消费模式5.多生产多消费模 ...
- 【性能优化】一文学会Java死锁和CPU100%问题的排查技巧
原文链接: 00 本文简介 作为一名搞技术的程序猿或者是攻城狮,想必你应该是对下面这两个问题有所了解,说不定你在实际的工作或者面试就有遇到过: 第一个问题:Java死锁如何排查和解决? 第二个问题:服 ...
- Java安全之RMI协议分析
Java安全之RMI协议分析 0x00 前言 在前面其实有讲到过RMI,但是只是简单描述了一下RMI反序列化漏洞的利用.但是RMI底层的实现以及原理等方面并没有去涉及到,以及RMI的各种攻击方式.在其 ...
随机推荐
- 15_Web框架-mini frame
1.WSGI协议概述(Python Web Server Gateway Interface) 1.WSGI允许开发者将选择web框架和web服务器分开,可以混合匹配web服务器和web框架,选择一个 ...
- Activiti7 网关(排他网关)
什么是排他网关? 排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用于在流程中实现决策,当流程执行到这个网关,所有分支都会判断条件是否为true,如果为true则执行该分支 注意:排他网关 ...
- Leetcode 974 和可被K整除的子数组
题目: 解法 //前缀和算法+hash表 class Solution { public: int subarraysDivByK(vector<int>& A, int K) { ...
- java输出1-100之间的数并求和for+while+do while实现
public static void main(String args[]) {//do while int sum = 0; //当前之和 int i = 1; //加数 do { if (i%2= ...
- LeetCode.518 零钱兑换Ⅱ(记录)
518题是背包问题的变体,也称完全背包问题. 解法参考了该篇文章,然后对自己困惑的地方进行记录. 下面是该题的描述: 有一个背包,最大容量为 amount,有一系列物品 coins,每个物品的重量为 ...
- UI中列表
1.ul.ol.dl
- 尚硅谷阳哥JVM笔记
JVM体系结构 类加载器(快递员): 只负责加载java文件,编译后的class文件在文件开头有特定的文件表示,将class文件字节码内容从硬盘加载到JVM内存中并将这些内容转换成方法区的运行时数据结 ...
- win10家庭版启用远程桌面
此电脑右键属性->远程设置->允许远程协助连接这台计算机 勾选 下载RDP Wrapper 地址:https://github.com/stascorp/rdpwrap/releases ...
- 对vue的初步学习
vue: vue:一个mvvm框架(库),和angular类似 比较容易上手 指令以v=xxx 一片html代码配合接送,在new一个vue实例 适合:移动端,小巧 vue基本雏形 v-model 一 ...
- Linux实战(13):Centos8 同步时间
前言 以下操作是通过ntpdate命令实现同步 timedatectl set-timezone Asia/Shanghai # 设置时区 rpm -ivh http://mirrors.wlnmp. ...