2016.12.01
明天就开始了,一点书都看不进去,还是撸代码吧,现在想把基础打牢一点,所以还要自己看下书。
java的同步机制解决了线程安全问题,但也引发了死锁现象。
死锁现象出现的根本原因是
1.存在两个或者是两个以上的线程。
2.存在两个或者是两个以上的共享。
死锁现象没有解决方案,只能避免。
下面用一段代码实现。
class DeadLock extends Thread{
public DeadLock(String name){
super(name);//相当于调用父类的构造函数,如果没有这个就不能初始化父类
}
public void run() {
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 Demo2 {
public static void main(String[] args) {
DeadLock d1 = new DeadLock("庹成");
DeadLock d2 = new DeadLock("崔宝文");
//开启线程
d1.start();
d2.start();
}
}
运行结果会出现:
庹成拿到了遥控器,准备 去拿电池!!
崔宝文拿到了电池,准备去拿遥控器!!
没啦。。