實現乙個擁有如下方法的執行緒安全有限阻塞佇列:
boundedblockingqueue(int capacity) 構造方法初始化佇列,其中capacity代表佇列長度上限。
void enqueue(int element) 在隊首增加乙個element. 如果佇列滿,呼叫執行緒被阻塞直到佇列非滿。
int dequeue() 返回隊尾元素並從佇列中將其刪除. 如果隊列為空,呼叫執行緒被阻塞直到佇列非空。
int size() 返回當前佇列元素個數。
你的實現將會被多執行緒同時訪問進行測試。每乙個執行緒要麼是乙個只呼叫enqueue方法的生產者執行緒,要麼是乙個只呼叫dequeue方法的消費者執行緒。size方法將會在每乙個測試用例之後進行呼叫
方案選擇:用lock
public
class
boundedblockingqueue
}finally}}
//入隊方法
public
void
enqueue
(int element)
throws interruptedexception
queue.
offerfirst
(element)
; size+=1;
//喚醒empty
empty.
signalall()
;}finally
}//出隊方法
public
intdequeue()
throws interruptedexception
res=queue.
polllast()
; size-=1;
//喚醒full
full.
signalall()
;}finally
return res;
}public
intsize()
}
架構設計有感
架構是乙個很直覺化的概念,理解的反差會讓設計變得大相徑庭。架構設計者 不一定是架構師 對系統的把握 認知和控制力會極大的影響系統開發的走勢。需求分析,功能分拆,技術選型,人員控制,規模 進度和質量控制等都是架構設計者的任務,穩定安全,高效 可擴充套件 可維護 優秀的使用者體驗是架構設計的基本目標。不...
資料庫設計(有例項)
1.概念 資料庫設計就是根據業務系統的具體需求,結合我們所選用的dbms 資料庫管理系統 為這個業務系統構造出最優的資料儲存模型。並建立資料庫中的表結構以及表與表之間的關聯關係的過程。使之能有效的對應用系統中的資料進行儲存,並可以高效的對已儲存的資料進行訪問。關係型資料庫系統 mysql oracl...
學遊戲設計有前途嗎
現如今是乙個資訊化時代,資訊的傳遞都是通過網際網路來傳遞的。學習計算機,掌握一門計算機的技術,在現如今的社會,無論是在就業還是在薪資方面都是非常有優勢的。在如今眾多的計算機專業中我們選擇乙個適合自己的專業是非常重要的事情,選擇的專業是你可以在這個行業中不斷去發展的。然而我們選擇的時候並不是看別人選擇...