Sobes.tech
Junior — Middle
100

Wanneer en waarom moet je de combinatie van de sleutelwoorden synchronized en volatile in Java gebruiken om threadveiligheid te garanderen?

Bedrijven waar gevraagd werd
Stroki

Antwoord van AI

sobes.tech AI

Ключевое слово volatile в Java гарантирует, что чтение и запись переменной будут происходить напрямую из основной памяти, а не из кэша потока, обеспечивая видимость изменений между потоками.

Ключевое слово synchronized обеспечивает взаимное исключение, то есть только один поток может выполнять синхронизированный блок кода одновременно, а также гарантирует полную синхронизацию памяти при входе и выходе из блока.

Комбинация volatile и synchronized применяется, когда нужно обеспечить и видимость изменений переменной между потоками, и атомарность операций с ней. Например, если переменная читается часто без блокировок, но иногда обновляется в синхронизированном блоке, volatile гарантирует, что потоки увидят актуальное значение, а synchronized — что обновление будет атомарным.

Пример:

private volatile int counter;

public void increment() {
    synchronized(this) {
        counter++;
    }
}

public int getCounter() {
    return counter; // видит актуальное значение благодаря volatile
}

Таким образом, volatile обеспечивает видимость, а synchronized — атомарность и взаимное исключение.