【JAVA】死锁机制
JAVA 机制 死锁
2023-09-11 14:20:37 时间
死锁
死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序请求同一组锁的时候。
例如,如果线程1锁住了A,然后尝试对B进行加锁,同时线程2已经锁住了B,接着尝试对A进行加锁,这时死锁就发生了。线程1永远得不到B,线程2也永远得不到A,并且它们永远也不会知道发生了这样的事情。为了得到彼此的对象(A和B),它们将永远阻塞下去。这种情况就是一个死锁。
如果线程1稍微领先线程2,然后成功地锁住了A和B两个对象,那么线程2就会在尝试对B加锁的时候被阻塞,这样死锁就不会发生。因为线程调度通常是不可预测的,因此没有一个办法可以准确预测什么时候死锁会发生,仅仅是可能会发生。
class TTT extends Thread {
private Integer p1 = null;
private Integer p2 = null;
private String name = null;
public TTT(Integer p1, Integer p2, String name) {
this.p1 = p1;
this.p2 = p2;
this.name = name;
}
public void run() {
/**
* 死锁(这里出现死锁的原因就是交叉访问锁造成的)
*/
// try {
// if ("张三".equals( this.name )) {
// synchronized (p2) {
// Thread.sleep( 10 );
// synchronized (p1) {
//
// }
// }
// } else {
// synchronized (p1) {
// Thread.sleep( 10 );
// synchronized (p2) {
//
// }
// }
// }
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
/**
* 修改后
*/
try {
if ("张三".equals( this.name )) {
synchronized (p1) {
Thread.sleep( 10 );
synchronized (p2) {
}
}
} else {
synchronized (p1) {
Thread.sleep( 10 );
synchronized (p2) {
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static class 死锁 {
public static void main(String[] args) {
Integer p1 = 11;
Integer p2 = 22;
TTT t1 = new TTT( p1, p2, "张三" );
TTT t2 = new TTT( p1, p2, "李四" );
t1.start();
t2.start();
System.out.println();
}
}
}
相关文章
- Java反射机制(四):动态代理
- Java正则引发的思考
- java动态编译
- java反射机制的原理与简单使用
- Java注解基础概念总结
- 图解 Java IO : 二、FilenameFilter源码
- Java实现 蓝桥杯 算法训练 Rotatable Number(暴力)
- Java实现 LeetCode 54 螺旋矩阵
- java实现第二届蓝桥杯地铁换乘(C++)
- Java实现第九届蓝桥杯第几天
- Java中IO软件包的详细介绍
- Java实现 蓝桥杯VIP 算法提高 班级排名
- 深入浅出: Java回调机制(异步)
- Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules
- 【JAVA】Java循环语句中的continue跳转进入下一次循环是否判断循环条件
- 【JAVA】毕向东Java基础视频教程-笔记
- Java java.util.concurrent.Future的一个例子
- 使用javap分析Java的字符串操作
- Atitit web httphandler的实现 java python node.js c# net php 目录 1.1. Java 过滤器 servelet1 1.2. Python的
- 给 SAP BTP 平台上的 Java 应用增添用户登录和认证机制
- Spire.Doc for Java 10.12.2 update Word to PDF/HTML to Word
- Java Agent (JVM Instrumentation 机制) 极简教程
- java.lang.OutOfMemoryError: Java heap space错误及处理办法(收集整理、转)
- 002-java反编译工具jd-gui
- Atitit.js javascript异常处理机制与java异常的转换.js exception process Voae
- Java:openjdk: error: Student is abstract; cannot be instantiated;java编译环境
- 【java】Java 封装