A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM代景康 高级黑马   /  2013-11-2 18:36  /  753 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

 1./*  2. * .死锁
  3. * 同步中嵌套同步
  4. * 也就是有两个房子,A和B,主人A 拿着B房间的锁,B主人拿着A房间的锁,A拿不到B的锁,就进不去房间
  5. * 而B拿不到A的锁,也进不去房间,两人相持不下
  6. * 死锁属于操作系统的概念了……其实很好理解。最经典的例子就是,You first,You first问题。
  7. * 一个门,两个“中国人”,都很有礼貌,走碰头了,都想过这个门,两个人都谦让对方先过,结果是,谁也过不去……。
  8. * 还有就是哲学家问题!说是四个哲学家坐在桌子上等着吃饭,每个人一边一根筷子,四个人四根筷子。
  9. * 一个人拿到两根筷子的时候才能吃。否则等待…… ,有一种情况就是,四个人,每个人都拿了一根筷子,
  10. * 还没有人放手。结果四个人都饿死……
  11. *
  12. *
  13. * */
  14.class Lock implements Runnable
  15.{
  16.    private boolean flag;
  17.    public Lock(boolean flag)
  18.    {
  19.        this.flag=flag;
  20.    }
  21.    public void run()
  22.    {
  23.        if(flag)
  24.        {
  25.            while(true)
  26.            {
  27.                synchronized(MyLock.locka) //a锁中嵌套 b锁
  28.                {
  29.                    System.out.println("if locka");
  30.                    synchronized(MyLock.lockb)
  31.                    {
  32.                        System.out.println("if lockb");
  33.                    }
  34.                }
  35.            }
  36.        }
  37.        else
  38.        {
  39.         while(true)
  40.         {
  41.                synchronized(MyLock.lockb) //b 锁中嵌套a锁
  42.                {
  43.                    System.out.println("else lockb");
  44.                    synchronized(MyLock.locka)
  45.                    {
  46.                        System.out.println("MyLock.locka");
  47.                    }
  48.                }
  49.         }
  50.        }
  51.
  52.    }
  53.}
  54.
  55.class MyLock
  56.{
  57.    static Object locka=new Object();
  58.    static Object lockb=new Object();
  59.}
  60.
  61.
  62.
  63.public class LockDemo {
  64.
  65.    public static void main(String[] args) {
  66.
  67.        Thread lock1=new Thread(new Lock(false));
  68.        Thread lock2=new Thread(new Lock(true));
  69.        lock1.start();
  70.        lock2.start();
  71.    }
  72.
  73.}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马