說一下,如果我想爲一個Multiplex創建一個基於Web的預訂系統,其中有兩個大廳,每個大廳運行4個會顯示一天。我想同步每個節目的座位預訂。Java - 哪一種鎖定方法最適用於預訂系統
- 人A試圖預留2PM顯示在廳A
- 人B試圖預留6PM顯示在廳A
- 人物C試圖預留2PM顯示在B廳
- 人d試圖儲備2PM秀A館
- 人ê試圖保留下午6時顯示在B廳
所有這些,我想只有人·d等待一個人完成bookin因爲他們爲相同的大廳和相同的演出時間保留。所有的人應該能夠預定同時
我的業務層方法hallName,showId作爲參數
public int createBooking(String hallName, int showId){
//check if there are any available seats
//access DAO layer to create booking
return bookingId;
}
我無法同步此方法,因爲這將使所有預訂彼此等待。
我不能使用信號量,因爲它不基於參數獲取/釋放鎖定。我不知何故必須在獲取/釋放鎖的同時傳入一個參數,或者根據show id創建一個預訂隊列。 我不想硬編碼鎖的數量,因爲大廳和節目的號碼可能會隨時間而改變。
在Java 6中有辦法嗎? (框架 - 春季3 /服務器 - Websphere7)
可能有一個簡單的方法,但我恐怕我沒有在正確的方向思考。
如果你使用的是數據庫,爲什麼不依靠它來做你的鎖定?此外,請注意,您無法控制人員D是否等待Persion A,反之亦然,或者他們之間是否存在爭用。 – kdgregory
你有沒有考慮過使用演員?每個大廳+節目有一個「預約演員」,可以在系統保持高併發時有效排隊這些請求。見阿卡。 – maasg
我不會使用任何Java同步,但是一旦有人開始預留座位,就爲他們預留座位。如果他們取消了,把它放回可用的座位池中。此外,由於這是基於Web的,因此他們可能會關閉瀏覽器,因此您需要在這些臨時預訂上留下時間戳,並定期發佈超過「X」分鐘的任何內容。 –