死锁
什么是死锁
(百度百科) 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁
请写一个死锁Demo
public class DeadLock { private static Object lock1 = new Object(); private static Object lock2 = new Object(); public static void main(String[] args) { new Thread(() -> { synchronized (lock1) { sleep(2000); System.out.println("线程1, 等lock2"); synchronized (lock2) { System.out.println("线程1完成"); } } }).start(); new Thread(() -> { synchronized (lock2) { sleep(2000); System.out.println("线程2, 等lock1"); synchronized (lock1) { System.out.println("线程2完成"); } } }).start(); } private static void sleep(long time) { try { Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } } }
发现两个线程都不会打印出"完成", 因为产生了死锁, 都在等待对方持有的锁.