Sobes.tech
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.