Если два потока находятся в состоянии ожидания и вызывают wake, какой из них будет разбужен первым?

В Android, если два потока находятся в состоянии ожидания (wait) на одном объекте и вызывается notify (или notifyAll), то:

Короткий ответ

Что ответить на собеседовании

В Android, если два потока находятся в состоянии ожидания (wait) на одном объекте и вызывается notify (или notifyAll), то:

Подробный разбор

Ответ с пояснениями

В Android, если два потока находятся в состоянии ожидания (wait) на одном объекте и вызывается notify (или notifyAll), то:

  • При вызове notify() будет разбужен один произвольно выбранный поток из тех, что ждут на этом объекте. Java не гарантирует порядок, в котором потоки будут разбужены — это зависит от реализации JVM и планировщика потоков.
  • При вызове notifyAll() будут разбужены все потоки, ожидающие на объекте, но они будут конкурировать за монитор, и только один сможет продолжить выполнение сразу.

Таким образом, при вызове wake (notify) из нескольких ожидающих потоков будет разбужен один случайный поток, без гарантии порядка.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку