私は自分自身でデッドロックを実装しようとしていました。スレッドt1とt2はs1とs2を同じ順序でロックしています。しかし、Line1とLine2はsleepメソッドデッドロックは発生しません。このプログラムは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行目についてコメントをお持ちの場合は、他のプログラムの助けを借りてプログラムを継続的に実行してください。デッドロックが理解できます。 –
ワンノート:あなたが他の人にあなたの時間を過ごさせてもらうことを望みます。だから、あなたは常にあなたの入力をすべて正しくフォーマット/インディットするのにかかる1分を費やしてください。しかし、まだupvoted ... – GhostCat