2012-05-29 75 views
0

我正在Java中創建一個應用程序,其中存在一個存儲可用訪問插槽的數據庫中的表。如何在應用程序中同時處理多個用戶請求

基本上,當用戶提出請求時,程序應該在表格中找到一個具有開放(未使用)插槽的記錄。用戶的數據發送給他後,該插槽被標記爲已使用,不能再使用。

我感到困惑的是,如何處理多個同時發生的請求......例如,如果兩個請求同時進入,那麼它們就不可能有兩個同時獲取相同的時隙(記錄)從桌上?我如何確保即使有很多併發請求,每個請求都會選擇一個唯一的未使用的插槽,並且所有請求都會選擇不同的未使用的插槽。

還有一件事,我的確有很多插槽,但重要的是沒有一個插槽可以被2個不同的請求所接受。然而,即使這可能會在未來發生變化,如果請求數量大幅增加......所以我需要一個解決方案,以我所描述的方式處理大量請求。

回答

2

你想要做什麼叫做Connection pooling(在這裏使用tomcat的例子)。解決上述問題的方法是使用數據庫允許的信號量系統,特別是交易。

首先,您閱讀表格並找到未使用的第一條記錄。您將號碼傳回給您的應用程序。然後您嘗試獨佔打開記錄(用於書寫)。您再次檢查記錄是否仍未使用,如果是,則獲取記錄的數據。將數據保存到記錄並釋放它。但是,如果記錄在您打開寫入時突然使用,則需要退回並再次查找新記錄並重復該機制。

1

您可以將您的插槽取件請求放入同步隊列中。這樣你可以保證插槽是FIFO(先進先出)。您可以使用this

1

您使用的數據庫是? MySQL有SELECT ... FOR UDPATE行鎖定支持。

1

試試這個,

使用ArrayBlockingQueue線程安全的訪問....這將確保只有一個線程可以同時訪問記錄。

相關問題