Sobes.tech
Junior — Middle

Ինչպե՞ս է հոսքը ստանում օբյեկտի վերահսկողությունը և ինչպես է տեղի ունենում նրա բռնումը բազմա-թերթային միջավայրում։

sobes.tech AI

Պատասխան AI-ից

Բազմահոսքային միջավայրում, հոսքը ստանում է վերահսկողություն օբյեկտի վրա սինխրոնիզացիայի մեխանիզմների միջոցով, որոնք ապահովում են բացառիկ մուտք ռեսուրսին: Android-ում (և ընդհանուր Java-ում) դրա համար օգտագործվում են բանալի բառեր և դասեր, ինչպիսիք են synchronized, ReentrantLock և այլերը:

Երբ հոսքը ցանկանում է մուտք գործել օբյեկտ, նա փորձում է բռնել այդ օբյեկտի մոնիտորը (lock): Եթե մոնիտորը ազատ է, հոսքը ստանում է վերահսկողություն և կարող է կատարել օբյեկտի հետ գործողություններ: Եթե մոնիտորը զբաղված է այլ հոսքի կողմից, ընթացիկ հոսքը բլոկվում է և սպասում է, մինչև այն ազատվի:

Օրինակ synchronized-ով:

public class Counter {
    private int count = 0;

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

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

Այստեղ increment և getCount մեթոդները սինխրոնիզացված են, ինչը երաշխավորում է, որ միայն մեկ հոսք կարող է միաժամանակ կատարել այդ մեթոդները, կանխելով մրցակցության պայմանները:

Այսպիսով, օբյեկտի գրավումը նշանակում է ստանալ այդ օբյեկտի մոնիտորի (lock) ամրակը, ինչը ապահովում է նրա վիճակի անվտանգ մուտք՝ հոսքային անվտանգ։