图片演示一种死锁的现象
代码实现如图所示的死锁
public class DeadLock implements Runnable { Object a = new Object(); Object b = new Object(); int count = 0; @Override public void run() { while (true) { if (count % 2 == 0) { synchronized (a) { System.out.println("if ....lockA"); synchronized (b) { System.out.println("if....lockB"); } } } else { synchronized (b) { System.out.println("else......lockB"); synchronized (a) { System.out.println("else.....lockA"); } } } count++; } } }
解释代码死锁:Cpu进程调度是随机的,线程A执行,打印了几遍if else,这中间,count为奇数,而且线程2抢夺了CPU
资源进入else,而此时如果缺少锁对象A,则线程2无法运行,只能等待线程1释放锁对象A .线程1运行到一定位置也需要锁对象B。等待锁对象B运行完成释放B,两个线程互相等待,造成了死锁