デッドロック状態を実装しようとしていますが、どういうわけかそれを機能させることができません。Thread1 と Thread2 の両方のスレッドが run 関数に入りますが、誰が最初に run に入ったかに応じて、そのうちの 1 つだけが Sub/Sum に入ります。例: スレッド 2 が最初に run に入った場合、それは sub() を呼び出し、スレッド 1 は決して sum() を呼び出しません。Thread2 が sum() を呼び出す前にスリープし、Thread1 が Sum() に入るのに十分な時間を確保できるように、スリープ時間も追加しましたが、Thread1 は決して入りません。
public class ExploringThreads {
public static void main(String[] args) {
// TODO Auto-generated method stub
threadexample a1 = new threadexample();
Thread t1 = new Thread(a1, "Thread1");
Thread t2 = new Thread(a1,"Thread2");
t1.start();
t2.start();
}
}
class threadexample implements Runnable{
public int a = 10;
public void run(){
if(Thread.currentThread().getName().equals("Thread1"))
sum();
else if(Thread.currentThread().getName().equals("Thread2"))
sub();
}
public synchronized void sum()
{
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"In Sum");
sub();
}
public synchronized void sub()
{
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"In Sub");
sum();
}
}