Обрабатывать входные запросы асинхронно и синхронно выполнять их один за другим. - PullRequest
0 голосов
/ 04 июля 2018

Вот ситуация, которую я пытаюсь достичь: пользователь может отправить несколько запросов для выполнения вычислений, запрос должен быть сохранен в списке или очереди (список / очередь должен обрабатывать / сохранять эти запросы динамически), а затем один за другим запрос должен быть процесс. Он обработает следующий запрос после завершения выполнения первого запроса.

В текущей ситуации мы поступаем следующим образом:

  @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().

Я попробовал следующие варианты, но не нашел точного способа достижения вышеуказанного:

  1. Future & Future Task
  2. CompletableFuture

Также я хочу отменить опцию, но главное - поддерживать все запросы, когда они входят в какую-то структуру данных, и выполнять их один за другим. Я использую ZMQ и Fiddler для отправки запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...