Java 模拟死锁

//想理解死锁,就必须得搞懂锁的底层实现(粗略记下:锁这个对象,就是去找个对象拿东西,拿到了就能进去)
//然后看代码

public class Test1 {
public static void main(String[] args) {
String source1 = "资源一";
String source2 = "资源二";
new Thread(()->{
synchronized (source1) {
System.out.println(Thread.currentThread().getName() + "(王室后人):得到了" + source1);
System.out.println("主角1:得瑟一会,稍后再去攻打"+source1+" (举杯庆祝,轻歌艳舞,好不快活)");
//观众A:唉 你非得等别人拿到了你再去,明明可以抢先一步
//观众B: A 别说废话啊,不这样搞,那戏还演不演
//......
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("前辈们!我错了哇,你们把路为我铺好,我却如此,即使站在巨人的肩膀上又如何啊! 内心独白:努力,不懈怠,不骄不馁 才是沧桑大道");

synchronized (source2) {
System.out.println("唉 骄兵必败,你到不了我这喽");
}
}
},"主角1").start();

//主角登场
new Thread(()->{
synchronized (source2){
System.out.println(Thread.currentThread().getName()+"(起义者):得到了"+source2);
System.out.println("冲杀,给我拿下"+source1);
//观众 A: 明主啊 可惜可惜可惜 source1已被别人拿去
//......
System.out.println("2000 year 以后");
System.out.println("为何! 我拼死来到此处,这是为何...,你懈怠倒是无妨,可你害我身后这些子民无处可归啊!(吐血而亡)");


synchronized (source1){
System.out.println("唉 可惜了,我被那傲慢之人拿去了,自己懈怠却害了众人");
}
}
},"主角2").start();
}
}

posted on 2021-11-12 15:09  bkytian  阅读(59)  评论(0编辑  收藏  举报

导航