/* erzeugt ein Deadlock durch wechselseitigen Zugriff auf zwei Ressourcen r1, r2 * durch zwei Threads: DThread1 und DThread2 * wenn das Programm stehenbleibt kann man durch Drücken von Strg+Backslash * Informationen zum Deadlock (und den Threads) anzeigen */ class Deadlock{ //zwei Ressourcen die von den zwei Threads gesperrt werden Object r1 = new Object(); Object r2 = new Object(); class DThread1 extends Thread{ public void run(){ //Endlosschleife while(true){ System.out.print("T1 warte auf r1..."); //erst versuchen r1 zu sperren synchronized(r1){ System.out.println("T1..habe r1 und warte auf r2"); //dann r2 synchronized(r2){ } } }} }//D1 //macht das gleiche, wie DThread1 nur umgekehrte synchronized //Reihenfolge (erst r2, dann r1) class DThread2 extends Thread{ public void run(){ while(true){ System.out.println("T2 warte auf r2..."); synchronized(r2){ System.out.println("T2..habe r2 und warte auf r1"); synchronized(r1){ } } }} }//D2 //erzeugt und startet die zwei Threads public void startThreads(){ DThread1 d1 = new DThread1(); DThread2 d2 = new DThread2(); d1.start(); d2.start(); } public static void main(String[] args){ Deadlock d = new Deadlock(); d.startThreads(); } }