package com.thread;
public class TestDeadLock {
public static void main(String[] args) {
QRoad r = new QRoad(); //创建一个泉城路 作为一个共享资源
QRoad.Benz benz= r.new Benz(); //在泉城路上的奔驰 进行数据的共享 由于各自持有锁标记 不肯释放 最终导致 死锁
QRoad.Bmw bmw = r.new Bmw(); //在泉城路上的 宝马
benz.start();
bmw.start();
}
}
//测试多个线程持有锁标记 而不释放 最终导致死锁的问题
class QRoad{
Object east =new Object();
Object west = new Object();
class Benz extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
System.out.println("徐总驾驶奔驰出家门 去上课");
synchronized(east) {
System.out.println("徐总已经占领 路东 ");
try {
east.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(west){
System.out.println("徐总已经占领 路西 ");
}
}
System.out.println("徐总 ");
}
}
class Bmw extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
System.out.println("孙总已经出家门 准备去上课 ");
synchronized(west) {
System.out.println("孙总已经占领 路西 ");
synchronized(east) {
System.out.println("孙总已经占领 路东 ");
east.notify();
}
}
System.out.println("sun总 ");
}
}
}
16、测试死锁,AABB事件案例
最新推荐文章于 2024-09-23 15:50:28 发布