我試圖在java中自己實現死鎖。線程t1和t2都以相同的順序鎖定s1和s2,導致死鎖情況。但是,如果我註釋掉Line1和Line2調用睡眠方法的線程類,不會發生死鎖。我運行該程序超過15次,但刪除行1和行2不會導致死鎖。瞭解我的死鎖Java示例
所以我的查詢是,行1和行2(調用Thread.sleep)是必要的死鎖。如果是的話,那麼我沒有理解死鎖。如果不是,它會導致其他JVM死鎖?
//Thread DeadLock
class Threadlock
{
private final static String s1="java";
private final static String s2="deadlock";
public static void main(String[] args)
{
Thread t1= new Thread()
{
public void run()
{
synchronized(s1)
{
try { Thread.sleep(100);}
catch (Exception e) {} //Line 1
synchronized(s2)
{}
}
}
};
Thread t2= new Thread()
{
public void run()
{
synchronized(s2)
{
try { Thread.sleep(100);} catch (Exception e) {} //Line 2
synchronized(s1)
{}
}
}
};
t2.start();
t1.start();
}
}
當某些線程同時需要相同的鎖時,可能會發生死鎖。就你的情況而言,如答案所述,同步塊無效 - 他們需要接近「沒有時間」。閱讀http://tutorials.jenkov.com/java-concurrency/deadlock.html,它可以幫助你更好地理解機制。 –
如果您對第1行和第2行進行註釋,請在其他程序的幫助下持續運行您的程序,我相信您會通過eod瞭解死鎖。 –
一個想法:你希望別人花時間幫助你;所以你請花1分鐘時間來正確地格式化/全部輸入。但仍然upvoted ... – GhostCat