Встречается на собеседованиях • сегодня
Когда используешь volatile
volatile используется, когда нужно обеспечить видимость изменений переменной для всех потоков. Гарантирует, что чтение всегда будет из главной памяти, а запись — сразу в неё, минуя кеш CPU.
Основные случаи:
- Флаги завершения – простой способ остановить поток:
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) { /* ... */ } // Может зациклиться
}
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы