package demo.thread;
class DeadLock1 extends Thread {
DeadLock1(String name) {
super(name);
}
public void run() {
if ("f".equals(getName())) {
synchronized ("遥控器") {
System.out.println(getName() + "拿到了遥控器");
synchronized ("电池") {
System.out.println(getName() + "拿到了电池和遥控器,开着空调爽歪歪");
}
}
} else if ("m".equals(getName())) {
synchronized ("电池") {
System.out.println(getName() + "拿到了电池");
synchronized ("遥控器") {
System.out.println(getName() + "拿到了电池和遥控器,开着空调爽歪歪");
}
}
}
}
}
class DeadLock2 implements Runnable {
Object obj = new Object();
private int num = 100;
public void run() {
if ("a".equals(Thread.currentThread().getName()))
while (true) {
synchronized (obj) { //a进来锁上obj 1
show(); //a进不去this的锁(非静态方法的锁是this) 3
}
}
else if ("b".equals(Thread.currentThread().getName()))
while (true)
this.show();
}
private synchronized void show() {
//b进来锁上this 2
synchronized (obj) { //b进不去obj的锁 4
if (num > 0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
System.out.println(Thread.currentThread().getName() + ".....sale...." + num--);
}
}
}
}
class DeadLockTest {
public static void main(String[] args) {
DeadLock1 f = new DeadLock1("f");
DeadLock1 m = new DeadLock1("m");
f.start();
m.start();
DeadLock2 d = new DeadLock2();
Thread a = new Thread(d, "a");
Thread b = new Thread(d, "b");
a.start();
b.start();
}
}
/*死锁现象出现 的根本原因:
1. 存在两个或者两个以上的线程。
2. 存在两个或者两个以上的共享资源。*/
f拿到了遥控器
f拿到了电池和遥控器,开着空调爽歪歪
m拿到了电池
m拿到了电池和遥控器,开着空调爽歪歪
a…sale…100
a…sale…99
a…sale…98
a…sale…97
a…sale…96
a…sale…95
a…sale…94
a…sale…93
a…sale…92
a…sale…91
a…sale…90
a…sale…89
a…sale…88
a…sale…87
a…sale…86
a…sale…85
a…sale…84
a…sale…83
a…sale…82
a…sale…81
a…sale…80
a…sale…79
a…sale…78
a…sale…77
a…sale…76
a…sale…75
a…sale…74
a…sale…73
a…sale…72
a…sale…71
a…sale…70
a…sale…69
a…sale…68
a…sale…67
a…sale…66
a…sale…65
a…sale…64
a…sale…63
a…sale…62
a…sale…61
a…sale…60
a…sale…59
a…sale…58
a…sale…57
a…sale…56
a…sale…55
a…sale…54
a…sale…53
a…sale…52
a…sale…51
a…sale…50
a…sale…49
a…sale…48
a…sale…47
a…sale…46
a…sale…45
a…sale…44
a…sale…43
a…sale…42
a…sale…41
a…sale…40
a…sale…39
a…sale…38
a…sale…37
a…sale…36
a…sale…35
a…sale…34
a…sale…33
a…sale…32
a…sale…31
a…sale…30
a…sale…29
a…sale…28
a…sale…27
a…sale…26
a…sale…25
a…sale…24
a…sale…23
a…sale…22
a…sale…21
a…sale…20
a…sale…19
a…sale…18
a…sale…17
a…sale…16
a…sale…15
a…sale…14
a…sale…13
a…sale…12
a…sale…11
a…sale…10
a…sale…9
a…sale…8
a…sale…7
a…sale…6
a…sale…5
a…sale…4
a…sale…3
a…sale…2
a…sale…1
…