Вот ситуация, которую я пытаюсь достичь: пользователь может отправить несколько запросов для выполнения вычислений, запрос должен быть сохранен в списке или очереди (список / очередь должен обрабатывать / сохранять эти запросы динамически), а затем один за другим запрос должен быть процесс. Он обработает следующий запрос после завершения выполнения первого запроса.
В текущей ситуации мы поступаем следующим образом:
@Override
public void execute(req) {
synchronized (pendingRequestList) {
pendingRequestList.add(req);
pendingRequestList.notifyAll();
}
}
@Override
public void run() {
while (true) {
synchronized (pendingRequestList) {
try {
if (pendingRequestList.size() == 0) {
logger.debug("Waiting for new request ... ");
pendingRequestList.wait();
}
}
catch (InterruptedException e1) {
e1.printStackTrace();
return;
}
}
}
// Perform execution synchronously
В этой ситуации, если я сделал несколько запросов, только один будет выполнен, а остальные истекли . Я хочу, чтобы все запросы ждали в каком-либо списке, пока не завершится выполнение одного.
Предложите способ сохранить все запросы в pendingRequestList
в методе execute()
и затем выполнить один за другим из этого списка в run()
.
Я попробовал следующие варианты, но не нашел точного способа достижения вышеуказанного:
- Future & Future Task
- CompletableFuture
Также я хочу отменить опцию, но главное - поддерживать все запросы, когда они входят в какую-то структуру данных, и выполнять их один за другим. Я использую ZMQ и Fiddler для отправки запроса.