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因此,执行完执行后,我将从列表中删除任务。上面的代码也适用于我们当前的实现,它们一次只处理一个请求,而其他请求根本不保存以供处理(它们会过期)。