gpt4 book ai didi

java - 预订预订申请中的同步

转载 作者:行者123 更新时间:2023-11-30 08:49:42 26 4
gpt4 key购买 nike

相对于经典的 Servlet -> 服务 -> DAO 模式,我对同步有一个非常根本的怀疑。

假设我有一个由多个并发用户访问的订票应用程序。任何两个用户都不应该最终预订同一张机票。当两个不同的用户尝试访问机票预订时,我认为会发生以下情况 -

  • Web 容器为两者创建请求/响应对象要求。将请求 url 映射到 servlet(比方说,BookingServlet)。
  • 为每个请求创建线程以运行服务方法BookingServlet 的。
  • 服务 -> doPost 方法创建一个 BookingService 对象并传递座位信息。
  • BookingService 对象执行一些业务逻辑并实例化BookingDAO 对象连接数据库并进行更新。

现在,为了避免两个用户预订同一张机票,必须在哪里进行同步?

是在 BookingService 还是在 BookingDAO?

但是,这是我的疑问,对于每个请求,我们实际上是在创建一个单独的 BookingService 和 BookingDAO 对象 - 这不会破坏将同步放在那里的目的吗?

最佳答案

有多种方法可以解决您的问题。

  1. 制作BookingService和/或 BookingDAO单例。通常不需要有更多的实例。然后你可以做同步。或者你可以在类里面进行同步。例如。 synchronized(BookingService.class) .

只有当您只有一个应用程序实例在运行时,这种方法才有效。因此我会推荐第二种选择(假设您使用的是关系数据库)

  1. 使用您的数据库进行“同步”。假设您的数据库中每个座位都有“未保留”的票,并且您希望能够为用户保留它,或者如果订单被取消(或未在给定时间内付款)则撤消此操作。然后你可以使用“乐观”的方法来做保留(伪SQL):update ticket set reserved_by = 'CustomerA' where ticket_id = 23 and reserved_by = null更新后,您需要检查更新的行数。如果是1 ,一切正常,如果是0 , 这表示该票已被他人预订,客户需要重新预订。

关于java - 预订预订申请中的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31311742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com