熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

多線程中的死鎖問題

2022-06-13   來源: Java高級技術 

  /*

   * 死鎖

   * 同步中嵌套同步

   * 也就是有兩個房子A和B主人A 拿著B房間的鎖B主人拿著A房間的鎖A拿不到B的鎖就進不去房間

   * 而B拿不到A的鎖也進不去房間兩人相持不下

   * 死鎖屬於操作系統的概念了……其實很好理解最經典的例子就是You firstYou first問題

   * 一個門兩個中國人都很有禮貌走碰頭了都想過這個門兩個人都謙讓對方先過結果是誰也過不去……

   * 還有就是哲學家問題!說是四個哲學家坐在桌子上等著吃飯每個人一邊一根筷子四個人四根筷子

   * 一個人拿到兩根筷子的時候才能吃否則等待…… 有一種情況就是四個人每個人都拿了一根筷子

   * 還沒有人放手結果四個人都餓死……

   *

   *

   * */

  class Lock implements Runnable

  {

      private boolean flag;

      public Lock(boolean flag)

      {

          thisflag=flag;

      }

      public void run()

      {

          if(flag)

          {

              while(true)

              {

                  synchronized(MyLocklocka) //a鎖中嵌套 b鎖

                  {

                      Systemoutprintln(if locka);

                      synchronized(MyLocklockb)

                      {

                          Systemoutprintln(if lockb);

                      }

                  }

              }

          }

          else

          {

           while(true)

           {

                  synchronized(MyLocklockb) //b 鎖中嵌套a鎖

                  {

                      Systemoutprintln(else lockb);

                      synchronized(MyLocklocka)

                      {

                          Systemoutprintln(MyLocklocka);

                      }

                  }

           }

          }

  

      }

  }

  

  class MyLock

  {

      static Object locka=new Object();

      static Object lockb=new Object();

  }

  

  

  

  public class LockDemo {

  

      public static void main(String[] args) {

  

          Thread lock=new Thread(new Lock(false));

          Thread lock=new Thread(new Lock(true));

          lockstart();

          lockstart();

      }

  

  }


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27430.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.