Chinaunix首页 | 论坛 | 博客
  • 博客访问: 280681
  • 博文数量: 28
  • 博客积分: 11
  • 博客等级: 民兵
  • 技术积分: 895
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-19 19:50
个人简介

不畏浮云遮望眼,只缘身在最高层

文章分类

全部博文(28)

文章存档

2014年(1)

2013年(27)

分类: Java

2013-03-10 10:03:14


点击(此处)折叠或打开

  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. class MyLock
  55. {
  56.     static Object locka=new Object();
  57.     static Object lockb=new Object();
  58. }



  59. public class LockDemo {

  60.     public static void main(String[] args) {
  61.         
  62.         Thread lock1=new Thread(new Lock(false));
  63.         Thread lock2=new Thread(new Lock(true));
  64.         lock1.start();
  65.         lock2.start();
  66.     }

  67. }

阅读(1395) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~