如何在应用程序中处理多个同时发生的用户请求

时间:2012-05-29 12:24:09

标签: java request

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

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

我感到困惑的是,如何处理许多同时发出的请求...例如,如果有2个请求同时进入,那么他们两个都不可能从同一个插槽中取出相同的插槽(记录)桌子?我如何确保即使有很多同时发出的请求,每个请求都会选择一个唯一的未使用的插槽,并且所有请求都会选择不同的未使用的插槽。

还有一件事,我确实有很多插槽,但重要的是不能通过2个不同的请求获取单个插槽。然而,即使这可能在将来发生变化,如果请求数量大幅增加......所以我需要一个能够以我所描述的方式处理大量请求的解决方案。

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

你在使用什么数据库? MySQL具有SELECT ... FOR UDPATE行锁定支持。

答案 3 :(得分:1)

试试这个,

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