死锁
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉那它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。

编码

| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 
 | public class DeadLockDemo {
 public static void main(String[] args) {
 String lockA = "lockA";
 String lockB = "lockB";
 new Thread(new MyThread(lockA, lockB), "T1").start();
 new Thread(new MyThread(lockB, lockA), "T2").start();
 }
 }
 
 class MyThread implements Runnable {
 
 private String lockA;
 private String lockB;
 
 public MyThread(String lockA, String lockB) {
 this.lockA = lockA;
 this.lockB = lockB;
 }
 
 @Override
 public void run() {
 synchronized (lockA) {
 System.out.println(Thread.currentThread().getName() + "lock:" + lockA + "=>get" + lockB);
 
 try {
 TimeUnit.SECONDS.sleep(2);
 } catch (InterruptedException e) {
 e.printStackTrace();
 }
 
 synchronized (lockB) {
 System.out.println(Thread.currentThread().getName() + "lock:" + lockB + "=>get" + lockA);
 }
 }
 }
 }
 
 | 

定位分析
中终端使用jps命令查看进程号定位。

得到进程号6705
再使用jstack 进程号命令查看具体信息。

可以看到引发死锁的具体原因!