2015-04-22 26 views
0

我目前正在Java中創建一個庫模擬器。這個庫有多個借用者,它們是線程。 每個借款人線程執行一系列功能,例如(創建借用清單,從圖書館借書,將圖書歸還圖書館)。在模型類中創建一個借用者數組,每個線程都在for循環內啓動。我目前遇到的一個問題是,由借款人運行的功能投入一種輸出隊列,藉此第一借入者輸入的第一個功能運行等。將多線程執行的函數放入隊列中

我的問題是,有沒有辦法,而不是在每個借用者線程到達它時執行每個函數,而是將所有線程的函數放入一個輸出隊列中,它將工作通過?

+0

您可能會看看Java的BlockingQueue實現(如ArrayBlockingQueue),它爲您正在討論的Producer-Consumer模式提供方便的集合實現。 –

+0

您放入隊列的對象可以是任何數據對象,策略,lambda函數......問題是什麼? –

+0

我試圖實現的是,而不是每個線程執行一個接一個,我寧願他們一個接一個執行某個功能。一個例子是「向圖書館索要一套書」。 –

回答

0

我使用BlockingDequeLink,先進先出)修正了類似的問題。 消費者線程從deque中彈出第一個Task並對其進行處理。完成後,他會報告並執行下一個任務等。 其他線程 - 在你的案例中借用者 - 只需將任務放入最後一個位置的deque即可。

希望這會有所幫助!