Sobes.tech
Junior — Middle

Υπήρξαν περιπτώσεις όπου αντιμετωπίσατε αμοιβαία μπλοκαρίσματα διαδικασιών σε συστήματα;

sobes.tech AI

Απάντηση από AI

Ναι, ο αδιέξοδος (deadlock) είναι μια κατάσταση όπου δύο ή περισσότεροι διαδικασίες ή νήματα περιμένουν αέναα την απελευθέρωση πόρων από το ένα το άλλο.

Στη Java, αυτό μπορεί να συμβεί λόγω λανθασμένης χρήσης της συγχρονισμού, για παράδειγμα όταν δύο νήματα προσπαθούν να αποκτήσουν δύο αντικείμενα monitor με διαφορετική σειρά.

Παράδειγμα:

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

Thread t1 = new Thread(() -> {
    synchronized(lock1) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock2) {
            // εργασία
        }
    }
});

Thread t2 = new Thread(() -> {
    synchronized(lock2) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock1) {
            // εργασία
        }
    }
});

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

Για να αποφύγετε το deadlock, είναι σημαντικό να ακολουθείτε μια σειρά στην απόκτηση των κλειδώσεων και να ελαχιστοποιείτε το χρόνο διατήρησης των πόρων.