package com.znsd.demo;
public class Demo01 {
public static String obj1 = "obj1";
public static String obj2 = "obj2";
public static void main(String[] args) {
Demo03 demo03=new Demo03();
Demo02 demo02=new Demo02();
Thread t1=new Thread(demo03);
Thread t2=new Thread(demo02);
t1.start();
t2.start();
}
}
//线程1
class Demo02 extends Thread{
public void run() {
//一直循环,直到死锁为止
while(true) {
try {
//拿到obj1资源
synchronized(Demo01.obj1){
//线程沉睡3秒(让线程1拿到obj2资源)
Thread.sleep(3000);
System.out.println("线程一小睡一会");
synchronized(Demo01.obj2){//拿到obj2的资源
System.out.println("我拿到obj2资源");
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//线程2
class Demo03 extends Thread{
public void run() {
//一直循环,直到死锁为止
while(true) {
try {
//拿到obj2资源
synchronized(Demo01.obj2){
//线程沉睡3秒(让线程2拿到obj1资源)
Thread.sleep(3000);
System.out.println("线程二小睡一会");
synchronized(Demo01.obj1){//拿到obj1的资源
System.out.println("我拿到obj1资源");
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
死锁(synchronized)
最新推荐文章于 2022-01-23 18:52:05 发布