下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

JAVA一个非常简单的关于锁的例子

作者:课课家教育     来源: http://www.kokojia.com点击数:896发布时间: 2016-03-07 11:09:18

标签: java学习java锁java例子

大神带你学编程,欢迎选课

  内容:java中的一个简单的死锁例子,大概的思路:两个线程A和B,两把锁X和Y,现在A先拿到锁X,然后sleep()一段时间,我们知道sleep()是不会释放锁资源的。然后如果这段时间线程B拿到锁Y,也sleep()一段时间的话,那么等到两个线程都醒过来的话,那么将互相等待对方释放锁资源而僵持下去,陷入死锁。flag的作用就是让A和B获得不同的锁。

JAVA一个非常简单的关于锁的例子_java例子_java锁_课课家

  public class TestDeadLock {

  public void run() {

  MyThread mt = new MyThread();

  new Thread(mt, "张三").start();

  new Thread(mt, "李四").start();

  }

  class MyThread implements Runnable {

  private Object o1 = new Object();

  private Object o2 = new Object();

  private boolean flag = true;

  @Override

  public void run() {

  if (flag) {

  flag = false;

  synchronized (o1) {

  System.out.println(Thread.currentThread().getName() + " have o1");

  try {

  Thread.sleep(100);

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  synchronized (o2) {

  System.out.println(Thread.currentThread().getName() + " have o2");

  }

  }

  } else {

  flag = true;

  synchronized (o2) {

  System.out.println(Thread.currentThread().getName() + " have o2");

  try {

  Thread.sleep(100);

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  synchronized (o1) {

  System.out.println(Thread.currentThread().getName() + " have o1");

  }

  }

  }

  }

  }

  public static void main(String[] args) {

  new TestDeadLock().run();

  }

  }

赞(24)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程