寫一個死鎖
死鎖產生的原因:
一個線程進入鎖一需要鎖二,
另一個線程進入鎖二需要鎖一,
由於鎖一鎖二都被占了,所以線程執行不下去。
所以只需寫一個相互交叉的鎖一鎖二就可以產生死鎖。
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();
}
}
寫一個死鎖