java设计一个排队叫号系统_一个简易的叫号系统实现方案
最近遇到一個開發case:我們提供有限的資源服務,當資源不足時,需要排隊,同時當輪到某個人使用時,要通知他來使用,如果一定時間他還沒有來用,需要通知下一個排隊人,這個場景有沒有很熟悉?沒錯就是我們去吃飯時候的排隊叫號,去銀行時候的排隊叫號,買房子排隊搖號,可以說在服務人數超過資源限制的場景都會用到,接下來說一下我的實現方案
語言:java
用到的java類:
1)ArrayBlockingQueue? 保證先進先出的隊列順序
2)ScheduledThreadPoolExecutor:超時檢測,通知下一個
算法:遞歸
偽代碼:
String currentWaitingPerson=""; //當前輪到的那一位
boolean resourceBusy = false //默認不需要排隊
if(resourceBusy && !person.equals(currentWaitingPerson)){
ArrayBlockingQueue.put(person)
}
else{
person 去使用資源
}
//當前使用資源的人任務結束,釋放掉資源,需要通知下一個排隊人
function notifyWaitingPerson(){
if(currentTask is end){
person = ArrayBlockingQueue.take()
currentWaitingPerson = person
if(null!=person){
notify(person)
schedule.execute(new Runnable({
if(person 沒有來使用資源){
//遞歸調用,通知下一個
notifyWaitingPerson()
}
}),指定一個超時時間)
}
}
}
如果有排隊的人過號了,又來詢問,看自己的機制了,如果需要排在隊列頭,blockingQueue換成priviorityQueue即可,如果是過號重排的話,直接放到隊尾即可
有更好的干貨?歡迎來聞道課堂分享你的知識,知識付費的新平臺
聞道課堂
總結
以上是生活随笔為你收集整理的java设计一个排队叫号系统_一个简易的叫号系统实现方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非接触式IC卡、条码卡、磁道卡、接触式I
- 下一篇: win7原版镜像_U盘安装原版Windo