0

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

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

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

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

4

4 回答 4

2

您想要做的是称为连接池(此处使用 tomcat 的示例)。上述问题的解决方案是使用数据库允许的信号系统,特别是事务。

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

于 2012-05-29T12:39:36.887 回答
1

尝试这个,

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

于 2012-05-29T12:46:53.427 回答
1

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

于 2012-05-29T12:35:27.477 回答
1

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

于 2012-05-29T12:29:18.157 回答