java中同步机制解决了线程安全问题,但是也同时引发死锁现象。
死锁现象:
死锁现象出现 的根本原因:
1. 存在两个或者两个以上的线程。
2. 存在两个或者两个以上的共享资源。
死锁现象的解决方案: 没有方案。只能尽量避免发生而已。
这个例子在我电脑很难测试出来成功取钱,大部分时间都是处于死锁
class DeadLock extends Thread {
public DeadLock() {
}
public DeadLock(String name) {
super(name);
}
@Override
public void run() {
if ("张三".equals(currentThread().getName())) {
synchronized ("银行卡") {
System.out.println("张三有银行卡,但没有密码");
synchronized ("密码") {
System.out.println("张三又知道了密码,取钱找乐子去了。。。");
}
}
} else if ("李四".equals(currentThread().getName())) {
synchronized ("密码") {
System.out.println("李四知道密码,但没有银行卡");
synchronized ("银行卡") {
System.out.println("李四又拿到银行卡,取钱吃大餐去咯。。。");
}
}
}
/*if("张三".equals(Thread.currentThread().getName())){
synchronized ("遥控器") {
System.out.println("张三拿到了遥控器,准备 去拿电池!!");
synchronized ("电池") {
System.out.println("张三拿到了遥控器与电池了,开着空调爽歪歪的吹着...");
}
}
}else if("李四".equals(Thread.currentThread().getName())){
synchronized ("电池") {
System.out.println("狗娃拿到了电池,准备去拿遥控器!!");
synchronized ("遥控器") {
System.out.println("狗娃拿到了遥控器与电池了,开着空调爽歪歪的吹着...");
}
}
}*/
}
}
public class Demo1 {
public static void main(String[] args) {
DeadLock d1 = new DeadLock("张三");
DeadLock d2 = new DeadLock("李四");
d1.start();
d2.start();
}
}