public static void main(String[] args) throws InterruptedException {
//创建多线程任务对象
DeadLockText DLT = new DeadLockText();
//创建俩个多线程
Thread T1 = new Thread(DLT);
Thread T2 = new Thread(DLT);
//启动第一个线程
T1.start();
//为了让主线程和现诚意能够有时间,所以执行完线程一睡眠3毫秒
Thread.sleep(3);//此处需要抛出异常
//改变flag的值,然后让俩个线程交换
DLT.flag = false;
//启动线程二,然后必然死锁
T2.start();
}
}
//定义一个多线程任务对象的类 利用第二种方法接了来实现多线程
class DeadLockText implements Runnable{
//利用Objetc来定义了俩吧锁 Object 属于所有对象的类
private Object Lock_A = new Object();
private Object Lock_B = new Object();
//定义了一个boolean变量flag
boolean flag = true;
//重写run方法
public void run() {
//利用双层嵌套实现死锁,写代码千万不能这样写,这只是演示一下死锁
if(flag){
while(true)//加了while接肯定会实现死锁
synchronized (Lock_A) {//同步代码块1
System.out.println(Thread.currentThread().getName()+" if....Lock_A");
synchronized (Lock_B) {//同步代码块2
System.out.println(Thread.currentThread().getName()+" if....Lock_B");
}
}
}else{
//以下同上
while(true)
synchronized (Lock_B) {
System.out.println(Thread.currentThread().getName()+" else....Lock_B");
synchronized (Lock_A) {
System.out.println(Thread.currentThread().getName()+" else....Lock_A");
}
}
}
}
}