1. 程式人生 > >寫一個死鎖

寫一個死鎖

star his read lean tar 執行 implement bool UC

死鎖產生的原因:

一個線程進入鎖一需要鎖二,

另一個線程進入鎖二需要鎖一,

由於鎖一鎖二都被占了,所以線程執行不下去。

所以只需寫一個相互交叉的鎖一鎖二就可以產生死鎖。

class sisuogoucheng implements Runnable
{
  private boolean panduan=true;

  sisuogoucheng(boolean panduan)
  {
    this.panduan=panduan;  //寫一個判斷條件使線程進入不同的鎖。
  }


  public void run()

  {    

    if(panduan)

    {
      synchronized(mykey.obj1)
      {
        System.out.println("t1----obj1");
        synchronized(mykey.obj2)
        {
          System.out.println("t1------obj2");
        }
      }
    }
    else
    {
      synchronized(mykey.obj2)
      {
        System.out.println("t2-------obj2");
        synchronized(mykey.obj1)
        {
          System.out.println("t2---------obj1");
        }
      }
    }
  }
}

class mykey
{
  static Object obj1=new Object();  //創建兩個不同的鎖
  static Object obj2=new Object();
}

public class sisuo

{

  public static void main(String[] args)

   {

    Thread t1=new Thread(new sisuogoucheng(true));
    Thread t2=new Thread(new sisuogoucheng(false));

    t1.start();
    t2.start();
  }

}

寫一個死鎖