好的,我刚刚意识到这个问题。
假设您使用 Java + Tomcat 构建您的网络应用程序。
Tomcat同时收到来自2个客户端的2个调用。服务器在第二次调用之前接收到第一次调用(将调用一系列方法并返回一个整数)。
调用 1:
String passwordProvidedByUser=action.getPasswordFromClient();
String passwordFromDB=data.getPasswordFromDB();
if (passwordFromDB.equals(passwordProvidedByUser)){
boolean updated=data.updateInfo();
}
调用 2:
String newPassword=action.getPasswordFromClient();
boolean changePwd=data.changePwd(newPassword);
因此,如果 Call1 完成了 String passwordFromDB=data.getPasswordFromDB();
但还没有运行 boolean updated=data.updateInfo();
而 call 2 已经运行boolean changePwd=data.changePwd(newPassword);
。这意味着用旧密码调用 1 boolean updated=data.updateInfo();
?
我的问题是 Tomcat 服务器/Java 会在开始处理第二次调用之前完成第一次调用的所有操作并将结果返回给第一次调用吗?
或者 Tomcat 服务器/Java 刚刚开始处理第二个,而它仍在处理第一个(即服务器尚未向第一个返回结果,但已经开始处理第二个)?
最佳答案
每个调用都会进入队列,从工作线程获取它的位置进行处理 - 是的,有一个线程池负责处理请求,因此请求处理的顺序相当不确定。
关于java - java tomcat是以 "first come first serve"形式还是并行处理数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22149364/