Sobes.tech
Junior — Middle
101

Wat is het verschil tussen het gebruik van het trefwoord 'volatile' voor atomaire operaties en gesynchroniseerde blokken in Java?

Bedrijven waar gevraagd werd
Передовые Платежные Решения

Antwoord van AI

sobes.tech AI

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

Синхронизированные блоки (synchronized) обеспечивают как видимость, так и атомарность: они блокируют доступ к коду или данным, позволяя только одному потоку выполнять критическую секцию одновременно. Это предотвращает состояния гонки при изменении общих данных.

Пример:

volatile int counter = 0;

// Инкремент не атомарен, даже с volatile
counter++;

// Синхронизация для атомарного инкремента
synchronized(this) {
    counter++;
}

Итого:

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