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— гарантирует и атомарность, и видимость, но с накладными расходами на блокировку.