3.一个典型的死锁案例

2021/4/8 18:55:50

本文主要是介绍3.一个典型的死锁案例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

public class DeadLock {

  public static void main(String[] args) {
    A a = new A();
    B b = new B();
    Dead dead1 = new Dead(true,a,b);
    Dead dead2 = new Dead(false,a,b);
    new Thread(dead1).start();
    new Thread(dead2).start();
  }

}

class A{

}
class B{

}
class Dead implements Runnable{
  boolean flag;
  A a;
  B b;

  public Dead(boolean flag, A a, B b) {
    this.flag = flag;
    this.a = a;
    this.b = b;
  }

  @Override
  public void run() {
    if(flag){
      synchronized (a){
        System.out.println("上面的我获取了a锁");
        try {
          Thread.sleep(1000);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
        synchronized (b){
          System.out.println("上面的我获取了b锁");
        }
      }

    }else{
      synchronized (b){
        System.out.println("下面的我获取了b锁");
        try {
          Thread.sleep(1000);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
        synchronized (a){
          System.out.println("下面的我获取了a锁");
        }
      }
    }
  }

  
}

  

如何解决这个死锁问题

public void run() {
    if(flag){
      synchronized (a){
        System.out.println("上面的我获取了a锁");
      }
      try {
        Thread.sleep(1000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      synchronized (b){
        System.out.println("上面的我获取了b锁");
      }

    }else{
      synchronized (b){
        System.out.println("下面的我获取了b锁");
      }
      try {
        Thread.sleep(1000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      synchronized (a){
        System.out.println("下面的我获取了a锁");
      }
    }
  }

  



这篇关于3.一个典型的死锁案例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程