package com.dh.ch12;
public class DeadLockDemo implements Runnable {
private boolean flag;
// 使用obj1和obj2模拟两个对象资源
static Object obj1 = new Object();
static Object obj2 = new Object();
public void run() {
String name = Thread.currentThread().getName();
System.out.println(name + " flag : " + flag);
/*
* 如果flag为true,首先获取obj1资源,等待500毫秒后,获取obj2资源
* 如果flag为false,首先获取obj2资源,等待500毫秒后,获取obj1资源
*/
if (flag) {
synchronized (obj1) {
try {
System.out.println(name + " 休眠 500毫秒 ,等待 obj2 ");
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj2) {
System.out.println("获取obj2 ");
}
}
} else {
synchronized (obj2) {
try {
System.out.println(name + " 休眠 500毫秒 ,等待 obj1 ");
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj1) {
System.out.println("获取obj1 ");
}
}
}
}
public static void main(String[] args) {
DeadLockDemo obj1 = new DeadLockDemo();
DeadLockDemo obj2 = new DeadLockDemo();
/*
* 构造资源竞争模型
*/
// 将flag设置为true,为执行if语句
obj1.flag = true;
// 将flag设置为false,为执行else语句
obj2.flag = false;
Thread thread1 = new Thread(obj1);
Thread thread2 = new Thread(obj2);
thread1.start();
thread2.start();
}
}
java死锁演示
最新推荐文章于 2022-05-28 21:35:46 发布