【问题标题】:how to handle multiple simultaneous user requests in an application如何在应用程序中同时处理多个用户请求
【发布时间】:2012-06-03 16:09:37
【问题描述】:

我正在用 Java 创建一个应用程序,其中数据库中有一个存储可用访问槽的表。

基本上当用户发出请求时,程序应该在表中找到一条有一个打开(未使用)槽的记录。用户的数据发送给他后,该槽被标记为已使用,不能再使用。

我很困惑的是,如何处理许多同时请求...例如,如果同时有 2 个请求,那么它们是否有可能从桌子?我如何确保即使有许多同时请求,每个请求都选择一个唯一的未使用槽,并且所有请求都选择不同的未使用槽。

还有一件事,我确实有很多插槽,但重要的是没有一个插槽被 2 个不同的请求占用。但是,即使这种情况在未来也可能会发生变化,如果请求数量急剧增加......所以我需要一个解决方案,以按照我所描述的方式处理大量请求。

【问题讨论】:

    标签: java request


    【解决方案1】:

    您将槽位提取请求放入同步队列中。这样,您将保证插槽拾取是 FIFO(先进先出)。你可以使用this

    【讨论】:

      【解决方案2】:

      您使用的是什么数据库? MySQL 支持SELECT ... FOR UDPATE 行锁定。

      【讨论】:

        【解决方案3】:

        你想要做的事情叫做Connection pooling(这里使用tomcat的例子)。上述问题的解决方案是使用数据库允许的信号系统,特别是事务。

        首先,您读取表并找到未使用的第一条记录。您将该号码传播回您的应用程序。然后您尝试专门打开记录(用于写入)。您再次检查该记录是否仍然未使用,如果是,则获取该记录的数据。将数据保存到记录中并发布。但是,如果在打开记录时突然使用该记录进行写入,则需要回退并再次查找新记录并重复该机制。

        【讨论】:

          【解决方案4】:

          试试这个,

          使用ArrayBlockingQueue 进行线程安全访问......这将确保一次只有一个线程可以访问记录。

          【讨论】:

            猜你喜欢
            • 2021-12-31
            • 1970-01-01
            • 2019-10-12
            • 2018-04-04
            • 2014-05-03
            • 2022-01-21
            • 2013-11-17
            • 2021-12-21
            • 2012-06-24
            相关资源
            最近更新 更多