Sobes.tech
Junior — Middle

Ako vlákno získa kontrolu nad objektom a ako sa v mnohvláknovom prostredí vykonáva jeho zachytenie?

sobes.tech AI

Odpoveď od AI

V prostredí s viacerými vláknami získa vlákno kontrolu nad objektom prostredníctvom synchronizačných mechanizmov, ktoré zabezpečujú výlučný prístup ku zdroju. V Android (a všeobecne v Jave) sa na to používajú kľúčové slová a triedy ako synchronized, ReentrantLock a ďalšie.

Keď vlákno chce získať prístup k objektu, pokúsi sa zachytiť monitor (lock) tohto objektu. Ak je monitor voľný, vlákno získa kontrolu a môže vykonávať operácie s objektom. Ak je monitor obsadený iným vláknom, aktuálne vlákno je zablokované a čaká na uvoľnenie.

Príklad s synchronized:

public class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public synchronized int getCount() {
        return count;
    }
}

Tu sú metódy increment a getCount synchronizované, čo zaručuje, že iba jedno vlákno naraz môže tieto metódy vykonávať, čím sa predchádza podmienkam súťažného boja.

Takže, zachytenie objektu znamená získať zámok (lock) na monitori tohto objektu, čo zabezpečuje bezpečný prístup k jeho stavu.