Sobes.tech
Junior — Middle

Zijn er gevallen geweest waarin u te maken had met wederzijdse procesblokkades in systemen?

sobes.tech AI

Antwoord van AI

Ja, deadlock (interblokering) is een situatie waarin twee of meer processen of threads onbepaalde tijd wachten op het vrijmaken van bronnen door elkaar.

In Java kan dit gebeuren door verkeerd gebruik van synchronisatie, bijvoorbeeld wanneer twee threads proberen twee monitorobjecten in een andere volgorde te verkrijgen.

Voorbeeld:

Object lock1 = new Object();
Object lock2 = new Object();

Thread t1 = new Thread(() -> {
    synchronized(lock1) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock2) {
            // werk
        }
    }
});

Thread t2 = new Thread(() -> {
    synchronized(lock2) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock1) {
            // werk
        }
    }
});

t1.start();
t2.start();

Om deadlock te voorkomen, is het belangrijk om de volgorde van lock-acquisitie te volgen en de tijd dat bronnen worden vastgehouden te minimaliseren.