Если вы не хотите блокировать вашу программу во время ожидания изменения статуса (что имеет смысл), поместите ожидание в отдельный поток.
Как создать поток и запустить его, объясняетсяво многих местах, поэтому я не вижу смысла повторять код здесь.Просто выполните поиск.
Как сказал Маниш в комментарии, для решения проблемы неопределенного ожидания вы можете использовать счетчик повторов и выйти из цикла, либо если статус изменится на или , когда вы достигли максимума.количество повторных попыток.
Кроме того, я считаю, что эту версию ожидания немного легче читать:
TimeUnit.SECONDS.sleep(5);
Она работает так же, как Thread.sleep(5 * 1000);
.