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(); } }
运行结果会出现:
庹成拿到了遥控器,准备 去拿电池!!
崔宝文拿到了电池,准备去拿遥控器!!
没啦。。