繁体   English   中英

如何在一个应用程序中处理多个同时出现的用户请求

[英]how to handle multiple simultaneous user requests in an application

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

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

我感到困惑的是,如何处理许多同时发生的请求...例如,如果同时有2个请求,那么这两个请求是否都可能从表中拾取相同的插槽(记录)? 我如何确保即使同时有多个请求,每个请求也会选择一个唯一的未使用插槽,并且所有请求都将选择不同的未使用插槽。

还有一点,我确实有很多插槽,但是重要的是两个不同的请求都不能占用一个插槽。 但是,即使将来这种情况可能会改变,如果请求的数量急剧增加……所以我需要一种能够以我所描述的方式处理大量请求的解决方案。

您要执行的操作称为“ 连接池” (在此处使用tomcat的示例)。 解决上述问题的方法是使用数据库允许的信号量系统,特别是事务。

首先,您读取表并找到第一个未使用的记录。 您将数字传播回您的应用程序。 然后,您尝试以独占方式打开记录(用于写入)。 您再次检查记录是否仍未使用,如果是,则获取该记录的数据。 将数据保存到记录中并释放它。 但是,如果在打开该记录进行写入时突然使用了该记录,则需要后退并再次寻找新记录并重复该机制。

您将插槽提取请求放入同步队列中。 这样,您将确保插槽接收是FIFO(先进先出)。 你可以用这个

您正在使用哪个数据库? MySQL具有SELECT ... FOR UDPATE行锁定支持。

尝试这个,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM