Я не уверен, что мой подход правильный, поэтому я приложу все усилия, чтобы описать проблему как можно лучше.Ждать, если выполняется определенное условие?
Я программирую клиент, который подключается к серверу. Он часто отправляет некоторый (другой) запрос. Иногда может случиться так, что запросов слишком много, поэтому я вынужден повторно войти в систему. Вход в систему проверяется токеном, установленным в заголовке запроса.
Я хотел бы реализовать что-то вроде объекта блокировки/ожидания. Большинство запросов выполняются в отдельных потоках, но отправляют (окончательный) запрос через одну и ту же функцию. Прямо в этой функции я проверяю ответ на достоверность, и если сервер решил ударить меня, я отправляю запрос на повторный вход.
Моя проблема: если есть недействительный ответ, я повторно подключаюсь асинхронно (обратные вызовы JavaFX для ответа) и продолжаю. В связи с многопоточными задачами может возникнуть условие, при котором два (или более) запроса получают один и тот же недействительный ответ и пытаются повторно войти в систему, или одна задача пытается выполнить запрос, пока другой регистрируется (поэтому нет действительного токена) , получает недействительный ответ, начинает логин, а другой получает действительный логин, который становится недействительным во время нового входа и так далее.
Как я могу заставить свои задачи дождаться завершения запроса, запрошенного другим? Какой был бы лучший подход для этого?
Спасибо и извините за грамматику!
Спасибо за ответ. Как мне реализовать это ожидание? if (loginFlag) obj.wait(); и в моем loginProcedure loginFlag = true & при успешном входе в систему obj.notifyAll? Я нахожусь на мобильном телефоне, извините за отсутствие форматирования. – Nicolai
Да .. Держите флаг bool - «reLogin», для которого установлено значение false. Если сервер пинает вас, вы должны изменить его на true и уведомить все ожидающие потоки ... Остальные потоки будут ждать этого. – TheLostMind