Junior — Middle
Gab es Fälle, in denen Sie auf gegenseitige Blockierungen von Prozessen in Systemen gestoßen sind?
sobes.tech KI
Antwort von AI
Ja, Deadlock ist eine Situation, in der zwei oder mehr Prozesse oder Threads unendlich auf die Freigabe von Ressourcen warten.
In Java kann dies durch unsachgemäßen Einsatz von Synchronisation passieren, zum Beispiel wenn zwei Threads versuchen, zwei Monitore in unterschiedlicher Reihenfolge zu sperren.
Beispiel:
Object lock1 = new Object();
Object lock2 = new Object();
Thread t1 = new Thread(() -> {
synchronized(lock1) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock2) {
// Arbeit
}
}
});
Thread t2 = new Thread(() -> {
synchronized(lock2) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock1) {
// Arbeit
}
}
});
t1.start();
t2.start();
Um Deadlock zu vermeiden, ist es wichtig, die Reihenfolge beim Erwerb von Sperren einzuhalten und die Dauer der Ressourcenbindung zu minimieren.