JUC-死锁

2020-03-06  本文已影响0人  GIT提交不上

  死锁:两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉它们都将无法推进下去。
  死锁示例代码:

/**
 * @author luffy
 **/
public class DeadLockDemo {
    public static void main(String[] args){
        String lockA = "LockA";
        String lockB = "LockB";

        new Thread(()->{
            new DeadLockData(lockA,lockB).LockMethod();
        },"lockA").start();


        new Thread(()->{
            new DeadLockData(lockB,lockA).LockMethod();
        },"LockB").start();

    }
}
@Data
class DeadLockData{
    private String lockA;
    private String lockB;

    public DeadLockData(String lockA, String lockB) {
        this.lockA = lockA;
        this.lockB = lockB;
    }

    public void LockMethod(){
        synchronized (this.lockA){
            System.out.println(Thread.currentThread().getName()+"获得A,尝试获得B!");
            synchronized (this.lockB){
                System.out.println(Thread.currentThread().getName()+"获得B,尝试获得A!");
            }
        }
    }
}

   死锁解决 & 问题定位:

图1-1 jps命令.png 图1-2 jstack命令.png
上一篇 下一篇

猜你喜欢

热点阅读