7、死锁

来源:互联网 发布:sdspage电泳结果数据 编辑:程序博客网 时间:2024/05/22 15:08

过多的同步可能会出现死锁,死锁的操作一般是在程序运行的时候才有可能出现。

在一个同步方法中调用另一个对象的同步方法可能出现死锁。

package com.chocus.demo1;public class ThreadDemo7 {  public static void main(String[] args) {    new DeadLock();  }}class DeadLock implements Runnable {  Customer c = new Customer();  Waiter w = new Waiter();  public DeadLock() {    new Thread(this).start();    w.say(c);  }  @Override  public void run() {    c.say(w);  }}class Customer {  public synchronized void say(Waiter w) {    System.out.println("顾客:先吃饭再买单");    w.agree();  }  public synchronized void agree() {    System.out.println("顾客:同意了,先买单再吃饭");  }}class Waiter {  public synchronized void say(Customer c) {    System.out.println("服务员:先买单再吃饭");    c.agree();  }  public synchronized void agree() {    System.out.println("服务员:同意了,先吃饭再买单");  }}

结果

服务员:先买单再吃饭顾客:先吃饭再买单