Какими механизмами синхронизации можно обеспечить правильный порядок пробуждения потоков?
Answer from AI
sobes.tech AI
Для обеспечения правильного порядка пробуждения потоков в Android (и в Java в целом) можно использовать следующие механизмы синхронизации:
-
Мониторы и методы wait()/notify()/notifyAll() — позволяют одному потоку ждать определенного условия, а другому — уведомлять о его наступлении. Важно использовать notify() или notifyAll() внутри синхронизированного блока.
-
Семафоры (Semaphore) — позволяют ограничить количество потоков, которые могут одновременно выполнять определенный участок кода, и управлять порядком их пробуждения.
-
CountDownLatch — позволяет одному или нескольким потокам ждать, пока другие потоки не выполнят определённое действие.
-
Condition из java.util.concurrent.locks — более гибкий механизм ожидания и уведомления, позволяющий контролировать порядок пробуждения.
Пример с использованием wait/notify для упорядоченного пробуждения:
synchronized(lock) {
while (!condition) {
lock.wait(); // поток ждёт
}
// выполнение после пробуждения
}
// В другом потоке
synchronized(lock) {
condition = true;
lock.notify(); // пробуждение одного потока
}