Встречается на собеседованиях • сегодня

Когда используешь volatile

volatile используется, когда нужно обеспечить видимость изменений переменной для всех потоков. Гарантирует, что чтение всегда будет из главной памяти, а запись — сразу в неё, минуя кеш CPU.

Основные случаи:

  1. Флаги завершения – простой способ остановить поток:
java
private volatile boolean running = true;

public void stop() {
running = false;
}

text
2. **Одноразовая публикация** – если объект инициализируется единожды и затем только читается.  

⚠️ **Не подходит** для:  
- Атомарных операций (`i++`). Здесь нужен `AtomicInteger` или `synchronized`.  
- Сложных инвариантов (состояний из нескольких переменных).  

Пример **ошибки** без `volatile`:  
```java
// Без volatile поток может не увидеть изменения done
boolean done = false; // должно быть volatile!

void threadWork() {
    while (!done) { /* ... */ } // Может зациклиться
}
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы