Java 异步处理输入请求并逐个同步执行

Java 异步处理输入请求并逐个同步执行,java,asynchronous,zeromq,thread-synchronization,Java,Asynchronous,Zeromq,Thread Synchronization,以下是我试图实现的情况:用户可以发送多个请求来执行计算,请求应该存储在列表或队列中(列表/队列应该动态处理/保存这些请求),然后逐个处理请求第一个请求执行完成后,它将处理下一个请求。 在目前的情况下,我们正在采取以下措施: @Override public void execute(req) { synchronized (pendingRequestList) { pendingRequestList.add(req); pendingRequestLi

以下是我试图实现的情况:用户可以发送多个请求来执行计算,请求应该存储在列表或队列中(列表/队列应该动态处理/保存这些请求),然后逐个处理请求第一个请求执行完成后,它将处理下一个请求。

在目前的情况下,我们正在采取以下措施:

  @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
在这种情况下,如果我提出了多个请求,只有一个将执行,其余的将过期。我想让所有请求在某个列表中等待,直到一个请求的执行完成

建议在
execute()
方法中的
pendingRequestList
中维护所有请求的方法,然后在
run()
中从该列表中逐个执行

我尝试了以下选项,但没有找到实现上述目标的确切方法:

  • 未来与未来任务
  • 完全未来

  • 我还想取消选项,但主要是维护所有的请求,只要它们出现在一些数据结构中,并逐个执行它们。我正在使用ZMQ和fiddler发布请求。

    这很好,但是你有问题吗?@ScaryWombat前四行我想实现但无法实现。也许你只想我没有看到你从列表中“退出”任何“任务”。另外,您不应该在循环中的列表本身上进行同步,这样,当您尝试添加新任务时,线程将阻塞。@Jai因此,执行完执行后,我将从列表中删除任务。上面的代码也适用于我们当前的实现,它们一次只处理一个请求,而其他请求根本不保存以供处理(它们会过期)。