异步处理输入请求并同步一对一执行

时间:2018-07-04 06:44:38

标签: java asynchronous zeromq thread-synchronization

这是我要解决的情况:用户可以发送多个请求进行计算,该请求应存储在列表或队列中(列表/队列应动态处理/保存这些请求),然后一个接一个地请求应该是过程。 第一个请求的执行完成后,它将处理下一个请求。

在当前情况下,我们正在通过以下方式进行操作:

  @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. 未来与未来任务
  2. CompletableFuture

我也想取消选项,但主要是要在所有请求进入某种数据结构时保持所有请求,并一一执行。我正在使用ZMQ和提琴手发布请求。

0 个答案:

没有答案