java 死锁演示
java 死锁演示
模拟死锁生成
死锁是由多个线程竞争同一个资源导致
package com.feshfans;
/**
* 1. 本代码为展示 java 中死锁的产生
* 2. 死锁的排查方法
*/
public class DeadlockShow {
// 声明两个资源
private static final String ResourceA = "A";
private static final String ResourceB = "B";
private static void deadlock(){
Thread t1= new Thread(new Runnable() {
@Override
public void run() {
// 线程 A 先获取 ResourceA,即线程A持有 ResourceA 的锁
synchronized (ResourceA){
System.out.println("T1 get resource A");
try {
// 休眠 2 秒,目的是为了让线程 B 有足够的时间获取 ResourceB
// 为什么要用 sleep,因为 sleep 方法不会释放锁对象
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (ResourceB){
System.out.println("T1 get resource B");
}
}
}
},"Thread-A");
Thread t2= new Thread(new Runnable() {
@Override
public void run() {
// 线程 B 先获取 ResourceB,即线程 B 持有 ResourceB 的锁
synchronized (ResourceB){
System.out.println("T2 get resource B");
try {
// 休眠 1 秒,目的是为了让线程 A 有足够的时间获取 ResourceA
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (ResourceA){
System.out.println("T1 get resource A");
}
}
}
}, "Thread-B");
// 启动两个线程
t1.start();
t2.start();
}
public static void main(String[] args) {
deadlock();
// 主线程并不会退出,因为 deadlock() 产生的死锁,子线程一直没有执行完
}
}
死锁查看
- 先使用 jps 查看 java 进程的 pid, 如图:
使用 jstack 查看 java 栈信息,如图:
从上图中可以清楚的看出死锁的个数、哪几个线程之间产生了死锁、线程之间竞争资源的内存地址和资源类型(本例为 String)、产生死锁的代码行数 等信息
个人建议,大家在开启线程时,为每个线程都赋予一个名字,这样出现问题时,就会特别清楚
java 死锁演示的更多相关文章
- Java死锁演示
Java死锁演示 在线程中嵌套获取锁导致死锁.思路,尽量不要嵌套获取锁. package com.mozq.demo.demo; public class DeadLockDemo { private ...
- 一文学会Java死锁和CPU 100% 问题的排查技巧
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开 工欲善其事,必先利其器 00 本文简介 作为一名搞技术的程序猿或者是攻城狮,想必你应该是对下面这两个问题有所了解,说不定你在 ...
- 【性能优化】一文学会Java死锁和CPU100%问题的排查技巧
原文链接: 00 本文简介 作为一名搞技术的程序猿或者是攻城狮,想必你应该是对下面这两个问题有所了解,说不定你在实际的工作或者面试就有遇到过: 第一个问题:Java死锁如何排查和解决? 第二个问题:服 ...
- Thrift入门及Java实例演示<转载备用>
Thrift入门及Java实例演示 作者: Michael 日期: 年 月 日 •概述 •下载配置 •基本概念 .数据类型 .服务端编码基本步骤 .客户端编码基本步骤 .数据传输协议 •实例演示(ja ...
- C#多线程的死锁演示
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- Java死锁排查和Java CPU 100% 排查的步骤整理
================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...
- Java线程演示样例 - 继承Thread类和实现Runnable接口
进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括 ...
- 实例详解 Java 死锁与破解死锁
锁和被保护资源之间的关系 我们把一段需要互斥执行的代码称为临界区.线程在进入临界区之前,首先尝试加锁 lock(),如果成功,则进入临界区,此时我们称这个线程持有锁:否则呢就等待,直到持有锁的线程解锁 ...
- Java 死锁以及如何避免?
Java 中的死锁是一种编程情况,其中两个或多个线程被永久阻塞,Java 死锁情况 出现至少两个线程和两个或更多资源. Java 发生死锁的根本原因是:在申请锁时发生了交叉闭环申请.
随机推荐
- 【BW系列】SAP BW on HANA 迁移问题
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[BW系列]SAP BW on HANA 迁移问 ...
- centos8飞行驾驶舱和docker安装
零.先解决cenos8的网络(systemctl restart network.service已被废弃) 1.# vim /etc/sysconfig/network-scripts/ifcfg-e ...
- C++ 优先队列 priority_queue
平时定义的时候,直接上就完事了: priority_queue<int>Q; 默认大根堆. 之前很菜的时候不知道小根堆怎么写,还在考场上干过加个负号甩到大根堆里面去的蠢事. 它的完整形式呢 ...
- 查找两个有序数组中的第K个元素(find kth smallest element in 2 sorted arrays)
查找两个有序数组中的第K个元素 int FindKth(int a[], int b[], int k, int astart, int aend, int bstart, int bend) { ; ...
- [Vuejs] 点击单选框触发两次点击事件的处理
<el-radio-group v-model="uploadStatus" class="upload-status-radio"> <el ...
- HDU-5201 The Monkey King
题目描述 \(m\)个猴子分\(n\)个桃,要求第一个猴子的桃数严格大于其他猴子,问有多少种分法对\(1e9+7取模(\%1e9+7)\) Input \(1≤T≤25 ,1≤n,m≤100000\) ...
- python-day13(正式学习)
闭包函数 闭包 闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用).闭包指的是:函数内部函数对外部作用域而非全局作用域的引用. 额...这里提示一下闭包!=自 ...
- Python字符串和正则表达式中的反斜杠('\')问题
在Python普通字符串中 在Python中,我们用'\'来转义某些普通字符,使其成为特殊字符,比如 In [1]: print('abc\ndef') # '\n'具有换行的作用 abc defg ...
- Voting CodeForces - 749C (set,模拟)
大意: n个人, 两个党派, 轮流投票, 两种操作(1)ban掉一个人 (2)投票, 每轮一个未被ban的人可以进行一次操作(1)或操作(2), 求最终哪个党派得票最多. 显然先ban人会更优, 所以 ...
- mycat schema server rule
schema <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd" ...