Sobes.tech
Middle

Тартиб додани дар доираи барномасозии бисёрсоҳавӣ чӣ гуна фарқ мекунад?

sobes.tech AI

Ҷавоб аз AI

volatile ҳамаҷониба тағйироти тағйирёбандаро барои ҳама ҷӯйҳо мебинад. Вақте ки як ҷӯй арзишро ба тағйирёбандаи volatile менависад, ин тағйирот фавран барои дигар ҷӯҳо дар назар гирифта мешавад. Ҳамчунин, барқарорсозии амалиётҳои хондан ва навишт барои тағйирёбандаҳои volatile манъ аст.

Амалиётҳои атомӣ (синфҳои атомӣ дар баста java.util.concurrent.atomic) кафолат медиҳанд, ки амалиёт дар бораи тағйирёбанда ҳамчун як воҳиди ягона иҷро мешавад ва аз ҷониби дигар ҷӯҳо кӣ қатъ намешавад. Ин дар бораи дурустии амалиётҳои иловакунӣ, камкунӣ ва Compare-And-Swap бе истифодаи synchronized кафолат медиҳад.

Фарқи асосӣ: volatile танҳо намоёнро кафолат медиҳад, аммо атомарии амалиётҳои мураккабро (масалан, i++ — ки аз хондан, иловакунӣ ва навишт иборат аст) кафолат намедиҳад. Синфҳои атомӣ ҳам атомарии амалиётҳои ягона ва ҳам намоёнро таъмин мекунанд.

Масалан:

class VolatileCounter {
    volatile int count = 0;

    public void increment() {
        // Ин амалиёт НЕ атомӣ
        count++;
    }
}

class AtomicCounter {
    java.util.concurrent.atomic.AtomicInteger count = new java.util.concurrent.atomic.AtomicInteger(0);

    public void increment() {
        // Ин амалиёт АТОМИК
        count.incrementAndGet();
    }
}