Junior — Middle
91
Care este diferența dintre utilizarea cuvântului cheie 'volatile' pentru operații atomice și blocurile sincronizate în Java?
Companiile au fost întrebate
Передовые Платежные Решения
Răspuns de la AI
sobes.tech AI
Ключевое слово volatile в Java гарантирует видимость изменений переменной между потоками, то есть когда один поток изменяет значение volatile-переменной, другие потоки сразу увидят это изменение. Однако volatile не обеспечивает атомарность сложных операций (например, инкремента), только чтение и запись примитивных типов.
Синхронизированные блоки (synchronized) обеспечивают как видимость, так и атомарность: они блокируют доступ к коду или данным, позволяя только одному потоку выполнять критическую секцию одновременно. Это предотвращает состояния гонки при изменении общих данных.
Пример:
volatile int counter = 0;
// Инкремент не атомарен, даже с volatile
counter++;
// Синхронизация для атомарного инкремента
synchronized(this) {
counter++;
}
Итого:
volatile— гарантирует свежесть значения, но не атомарность операций.synchronized— гарантирует и атомарность, и видимость, но с накладными расходами на блокировку.