Sobes.tech
Middle
17

Что гарантируют ключевые слова volatile и synchronized?

Companies where asked
Лоция

Answer from AI

sobes.tech AI

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

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

Пример использования synchronized:

public class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public synchronized int getCount() {
        return count;
    }
}

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