1.什么是死锁?
两个或2个以上进程在执行过程中,因为争夺资源而造成一种互相等待的现象,如果没有外力干涉,他们无法在执行下去。
2.产生死锁原因:
1.系统资源不足 2.进程运行推进顺序不合适 3.资源分配不当
代码如下:
public class DeadLock { public static void main(String [] args) { Object o1 = new Object(); Object o2 = new Object(); new Thread(() -> { synchronized (o1) { System.out.println(Thread.currentThread().getName() +"持有锁o1,试图获取锁o2"); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o2) { System.out.println(Thread.currentThread().getName() +"获取锁o2"); } } },"A").start(); new Thread(() -> { synchronized (o2) { System.out.println(Thread.currentThread().getName() +"持有锁o2,试图获取锁o1"); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o1) { System.out.println(Thread.currentThread().getName() +"获取锁o1"); } } },"B").start(); } }
结果:
3.验证是否是死锁?
1.jps -l 2.jstack 进程号