Sobes.tech
Junior — Middle

Kaip srautas gauna kontrolę nad objektu ir kaip vyksta jo pagavimas daugiagijų aplinkoje?

sobes.tech AI

Atsakymas iš AI

Daugialypėje aplinkoje siūlas įgyja kontrolę nad objektu naudodamasis sinchronizacijos mechanizmais, kurie užtikrina išskirtinę prieigą prie ištekliaus. Androide (ir apskritai Java) tam naudojami raktiniai žodžiai ir klasės, tokios kaip synchronized, ReentrantLock ir kitos.

Kai siūlas nori pasiekti objektą, jis bando užfiksuoti (capture) to objekto monitorių (lock). Jei monitorius laisvas, siūlas gauna kontrolę ir gali atlikti operacijas su objektu. Jei monitorius užimtas kitu siūlu, dabartinis siūlas yra užblokuojamas ir laukia, kol jis bus atlaisvintas.

Pavyzdys su synchronized:

public class Counter {
    private int count = 0;

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

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

Čia, metodai increment ir getCount yra sinchronizuoti, kas garantuoja, kad tik vienas siūlas vienu metu gali vykdyti šiuos metodus, išvengiant lenktynių sąlygų.

Taigi, objekto užfiksavimas reiškia gauti monitoriaus (lock) užraktą ant to objekto, kas užtikrina saugų prieigą prie jo būsenos.