【问题标题】:does java tomcat process data in a form of "first come first serve" or parallelly?java tomcat 是以“先到先服务”的形式还是并行处理数据?
【发布时间】:2014-03-03 23:22:39
【问题描述】:

好的,我刚刚意识到这个问题。

假设您使用 Java + Tomcat 构建您的 Web 应用程序。

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 刚刚开始处理第二个,而它仍在处理第一个(即服务器尚未向第一个返回结果,但已经开始处理第二个)?

【问题讨论】:

  • ur?这是什么……我的空间?
  • 1) 你提供的用例永远不会被实现。 2)如果它会,比是的,乐观锁定。总而言之,提供串行但仍然并发的请求处理并不是一种常见的做法。您正在尝试实现一些其他人可能不需要的东西。至于银行系统中的乐观锁定——OFC。这是处理单个实体的并发修改的常用方法。如果您仍然看到问题,您将不得不为分布式应用程序发明自己的标准,因为 Java EE、ASP.NET 或更常见的 PHP 解决方案都适合您。恕我直言。

标签: java tomcat


【解决方案1】:

每个调用都进入队列,从那里被工作线程提取以进行处理 - 是的,有一个线程池负责处理请求,因此请求处理的顺序是不确定的。

【讨论】:

  • 所以它使用“先到先得”?否则我们有严重的编程问题
  • 嗯,请求肯定会从队列中一一挑选出来,但是对于并发环境,你不能保证响应生成的顺序。编辑:好的,你可以保证执行顺序,但不是默认的
  • 是的,这就是我的意思,因为如果服务器没有将结果返回给第一次调用并开始处理第二次调用,那么我们就会遇到严重的编程问题。
  • 我不明白你在这里看到的问题:)
  • 好吧,说很多人可以修改密码,你的第一次调用将读取会话并获取密码,如果匹配它会允许你获取数据,它会检查用户密码。现在,第二次调用将更改密码,所以如果第二次更改密码时第一次已经获得旧密码,那么用户可以使用旧密码访问数据??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 2014-12-15
  • 2012-10-15
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
相关资源
最近更新 更多