java线程死锁模拟
发布时间: 2017/9/30 11:32:30
1,关于死锁的理解
  死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。
  2,模拟死锁
  背景介绍:我们创建一个朋友类,当朋友向我们鞠躬的时候,我们也要向朋友鞠躬,这样才算一个完整的动作。当两人
  同时鞠躬的时候,都在等待对方鞠躬。这时就造成了死锁。
  模拟程序:
  package com.yxy.thread;
  /**
  * @author windows
  * 死锁模拟程序
  */
  public class Deadlock {
  /**
  * @author windows
  * 朋友实体类
  */
  static class Friend {
  //朋友名字
  private final String name;
  //朋友实体类型的构造方法
  public Friend(String name) {
  this.name = name;
  }
  //获取名字
  public String getName() {
  return this.name;
  }
  //朋友向我鞠躬方法,(同步的)
 public synchronized void bow(Friend bower) {
  System.out.format("%s: %s"
  + "  has bowed to me!%n",
  this.name, bower.getName());
  bower.bowBack(this);
  }
  //我回敬鞠躬方法,(同步的)
  public synchronized void bowBack(Friend bower) {
  System.out.format("%s: %s"
  + " has bowed back to me!%n",
  this.name, bower.getName());
  }
  }
  public static void main(String[] args) {
  //死锁模拟程序测试开始
  //创建两个友人alphonse,Gaston
  final Friend alphonse =
  new Friend("Alphonse");
  final Friend gaston =
  new Friend("Gaston");
  //启动两位友人鞠躬的线程。
  new Thread(new Runnable() {
  public void run() { alphonse.bow(gaston); }
  })。start();
  new Thread(new Runnable() {
  public void run() { gaston.bow(alphonse); }
  })。start();
  }
  }