У меня есть приложение, которому нужно подождать некоторое неизвестное количество времени. Он должен дождаться, пока несколько полей данных будут заполнены сервером.Лучший способ ожидания в Java
API между сервером и предоставляет мне возможность запрашивать данные, достаточно легко ...
API между сервером и предоставляет возможность получить свои данные обратно, одно поле в то время. Это не говорит мне, когда все поля будут заполнены.
Каков наиболее эффективный способ подождать, пока мой запрос будет обработан сервером? Вот некоторые псевдокод:
public class ServerRequestMethods {
public void requestData();
}
public interface ServerDeliveryMethods {
public void receiveData(String field, int value);
}
public class MyApp extends ServerRequestMethods implements ServerDeliveryMethods {
//store data fields and their respective values
public Hashtable<String, Integer> myData;
//implement required ServerDeliveryMethods
public void receiveData(String field, int value) {
myData.put(field, value);
}
public static void main(String[] args) {
this.requestData();
// Now I have to wait for all of the fields to be populated,
// so that I can decide what to do next.
decideWhatToDoNext();
doIt();
}
}
я должен ждать, пока сервер не закончит заполнение моих полей данных, а сервер не дает мне знать, когда запрос завершен. Поэтому я должен продолжать проверять, завершил ли мой запрос обработку. Каков наиболее эффективный способ сделать это?
wait() и notify() с помощью метода, защищающего цикл while, который проверяет, есть ли у меня все необходимые значения, каждый раз, когда я проснулся уведомлением()?
Наблюдатель и наблюдаемый метод, который проверяет, есть ли у меня все необходимые значения при каждом вызове моего Observer.Update()?
Каков наилучший подход? Благодарю.
«API-интерфейс сервера также обеспечивает способ получения моих данных назад, по одному полю за раз». Как это работает? Ожидается ли, что вызов будет заполнен этим конкретным полем или он будет немедленно возвращен, с данными поля или без них? –
@ сорок два Для того, чтобы получать сообщения назад, сервер требует, чтобы я реализовал интерфейс «ServerDeliveryMethods» в psuedocode. Поэтому, когда сервер отправляет мне данные, он вызывает этот метод и заполняет данные в параметрах. – rallison
Вопрос в том, что ваше приложение-клиент считает «выполненным»? Независимо от того, что вам, скорее всего, понадобится отдельный поток для связи с сервером, и семафор (концепция, а не класс), чтобы ждать в вашем основном потоке, который защищает метод 'solveWhatToDoNext(). – Perception