java死锁程序
2021-02-02 07:14
标签:deadlock 释放 获取 rac 死锁 资源 static nts 创建 (1)死锁案例 (2)用普通匿名类创建一个线程 java死锁程序 标签:deadlock 释放 获取 rac 死锁 资源 static nts 创建 原文地址:https://www.cnblogs.com/hdc520/p/12811033.html/**
* 一个简单的死锁类
* main方法中启动两个线程,分别调用methodA和methodB方法
* methodA方法首先获取到a对象的锁,睡眠1秒钟
* 此时methodB方法执行获取到b对象的锁,睡眠1秒
* 此时methodA需要去获取b对象的锁才能继续执行,但是b锁没有被释放无法获取到
* 此时methodB需要去获取a对象的锁才能继续执行,但是a锁没有被释放无法获取到
* 从而两者相互等待,都需要得到对方锁定的资源才能继续执行,从而死锁。
*/
public class DeadLock {
private static String a = "1";
private static String b = "2";
public void methodA() {
synchronized (a) {
System.out.println("我是A方法中获得到了A锁");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (b) {
System.out.println("我是A方法中获取到b锁");
}
}
}
public void methodB() {
synchronized (b) {
System.out.println("我是B方法中获得到了b锁");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (a) {
System.out.println("我是B方法中获取到a锁");
}
}
}
public static void main(String[] args) {
new Thread(() -> {
d.methodA();
}).start();
new Thread(() -> {
d.methodB();
}).start();
// new Thread(new Runnable() {
// @Override
// public void run() {
// d.methodB();
// }
// }).start();
}
}
上一篇:编程语言是一个工具