java 线程的死锁问题

以下的情况可能出现死锁

1.一个对象的同步方法去调用另一个对象的同步方法,同时另一个对象的同步方法也在调用这个对象的同步方法,导致一定几率的死锁,不一定每次都会出现死锁,模拟的代码如下

package threadpool;

public class DeadThreadDemo {
  public static void main(String[] args) {
    new DeadThread();
  }
}
//顾客
class Customer{
  public synchronized void say(Waiter w ){
    System.out.println("顾客说先办事,在给钱");
    w.doService();
  }

  public synchronized void doService( ){
    System.out.println("可以先给钱,再办事");
  }
}


class Waiter{
  public synchronized void say(Customer c){
    System.out.println("服务员说先给钱,才办事");
    c.doService();
  }

  public synchronized void doService(){
    System.out.println("ok先办事, 先给钱");
  }
}

//死锁线程
class DeadThread implements Runnable{
    Customer c = new Customer();
    Waiter w = new Waiter();
    public DeadThread(){
      new Thread(this).start(); //构造方法里启动线程,互相调用的间隔短,几率更大
      w.say(c);
    }
    @Override
    public void run() {
    // TODO Auto-generated method stub
    c.say(w);
    }

}

原文地址:https://www.cnblogs.com/lilefordream/p/3615888.html