簡體   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