Sobes.tech
Junior — Middle

Siz tizimlarda jarayonlarning o'zaro bloklanishiga duch kelganmisiz?

sobes.tech AI

AIdan javob

Ha, o'zaro blokirovka (deadlock) — bu ikki yoki undan ortiq jarayon yoki iplar bir-biridan resurslarni bo'shatishni abadiy kutayotgan vaziyat.

Java'da bu, sinxronizatsiyaning noto'g'ri ishlatilishi natijasida yuzaga kelishi mumkin, masalan, ikki ip ikki ob'ekt monitorini turli tartibda olishga harakat qilganda.

Misol:

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

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

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

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

Deadlockdan qochish uchun, bloklarni olish tartibiga rioya qilish va resurslarni ushlab turish vaqtini minimallashtirish muhimdir.