Вопрос проверяет знание инструментов для синхронизации потоков в Kotlin/Android.
synchronized – для блокировки доступа к общему ресурсу.
Atomic-классы – для атомарных операций (например, AtomicInteger).
Семафоры (Semaphore) – для ограничения доступа к ресурсу с заданным числом потоков.
synchronizedИспользуется для блокировки доступа к общему ресурсу из нескольких потоков.
Пример:
private val lock = Object()
fun updateSharedResource() {
synchronized(lock) {
// Критическая секция
counter++
}
}Когда использовать:
Для простых случаев блокировки (например, изменение общего поля).
Atomic-классыОбеспечивают атомарные операции без блокировок.
Пример:
private val atomicCounter = AtomicInteger(0)
fun increment() {
atomicCounter.incrementAndGet() // Безопасно для потоков
}Когда использовать:
Для счётчиков, флагов и других простых операций.
Semaphore)Ограничивают число потоков, которые могут одновременно получить доступ к ресурсу.
Пример:
private val semaphore = Semaphore(3) // Максимум 3 потока
fun accessResource() {
semaphore.acquire()
try {
// Работа с ресурсом
} finally {
semaphore.release()
}
}Когда использовать:
Для ограничения параллельных запросов (например, к API).