Подойдет ли Volatile при работе нескольких потоков с одной переменной

«Подойдет ли Volatile при работе нескольких потоков с одной переменной» — вопрос из категории Многопоточность, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

volatile обеспечивает видимость изменений переменной между потоками, но не гарантирует атомарность операций.

Подходит:

  • Для простых операций (чтение/запись)
  • Когда только один поток пишет, а остальные читают

Не подходит:

  • Для составных операций (инкремент, check-then-act)
  • Когда несколько потоков пишут

Пример:

@Volatile
var counter = 0 // НЕПРАВИЛЬНО для многопоточной записи

fun increment() {
    counter++ // Не атомарная операция
}

Вместо volatile для многопоточной записи лучше использовать:

  • AtomicInteger
  • synchronized
  • Mutex
  • Flow (в Kotlin)