我有大量的狀態機。偶爾,狀態機將需要從一個狀態移動到另一個狀態,這可能很便宜或昂貴,並且可能涉及DB讀取和寫入等。從很多隊列中消耗
這些狀態更改是由於來自客戶端的傳入命令而發生的,並且可能隨時發生。
我想平行工作量。我想要一個隊列說'把這臺機器從這個狀態移到這個狀態'。顯然,任何一臺機器的命令都需要按順序執行,但如果我有很多線程,我可以並行向前移動許多機器。
我可以爲每個狀態機器設置一個線程,但狀態機的數量是依賴於數據的,可能有數百或數千個;我不想每個狀態機都有一個專用的線程,我想要一個某種類型的池。
我怎樣纔能有一個工作者池,但確保嚴格按順序處理每個狀態機的命令?
UPDATE:所以想象Machine
實例有優秀的命令列表。當線程池中的執行程序完成使用命令時,如果它具有更多未完成的命令,它會將Machine
放回到線程池的任務隊列中。所以問題是,如何在追加第一個命令時自動將Machine
加入到線程池中?並確保這是所有線程安全?
看看[這篇文章](http://java.dzone.com/articles/ensuring-order-execution-tasks)。也許它有幫助。 –