2017-10-09 12 views
0

我正在寫一個java應用程序,其中中央數據結構將隨來自外部系統的請求和相應響應一起更新。 我怎樣才能確保沒有競爭條件?以下是我如何實施。如何維護使用多線程的異步操作任務的順序

我收到來自GUI的請求,我將它處理並存儲在hashmap的hashmap中,然後將請求轉發給外部系統,以便異步獲取響應。當我收到基於我之前發送的某個id的響應時,我更新了數據結構(hashmap的hashmap)

我創建了一個線程來處理來自GUI的請求,另一個線程處理來自外部系統的響應。 我創建了2個linkedblockingqueues - 一個用於請求,另一個用於響應

我正在使用executor服務爲請求&響應創建多個線程。 我如何確保事物按順序執行? 這是一個訂單管理系統,我不想在新訂單發送之前發送修改。

+0

如果您使用隊列,您的要求已在順序,是不是? – VGR

+0

是的,但我們是否需要爲請求和響應使用相同的隊列。如果是的話,性能會受到影響? – sri

+0

您是否要求如何同時處理多個請求,即使它們不按順序完成,同時仍將它們保留在保留請求順序的隊列中?根據訂購的請求編號或其他可排序請求屬性(如日期),您可能需要一個PriorityQueue。 – VGR

回答