我打算在幾天內開始一個新項目,我想在設計要點上進行一些審查。我應該在Java多線程中使用哪種數據結構?
存在舊的遺留代碼,它在內存數據庫中使用散列表。有一個線程使用來自文件和套接字的xml提要並填充此散列表,另一個線程進行驗證和更新,如果驗證成功,則第三個線程將驗證的數據保留在數據庫中。由於在更新期間性能很差(意味着其他兩個線程快速追趕並等待驗證線程完成),我計劃使用一個concurrenthashmap來爲我的解決方案建立原型,並創建多個線程進行驗證。我仍處於原型設計階段,但希望得到一些關於我是否朝着正確方向前進的反饋。先謝謝你。
散列表中的每個條目都是一個集合,它不需要根據散列表中的其他條目進行驗證。他們是孤立的。每個記錄的驗證需要進行一些數據庫調用,因此每個記錄驗證都需要時間。 –
因此,消費者生產商將工作得很好。事實上,它甚至可能在所有三層中都有效。一個線程池可以從隊列讀取數據並對其進行驗證,另一個線程池可以讀取已驗證的條目並將其保存在數據庫中。配置這些線程池以匹配讀者線程生成條目的速度。 –
謝謝。我只是意識到這一點 - 我不認爲我們將需要存儲在一個hashmap中。我可以使用ArrayBlockingQueue來實現消費者/生產者嗎?一旦從源讀取數據(一旦我的數據被構建),我將發佈到ArrayBlockingQueue中,然後消費者線程可以來驗證並持久化驗證的數據。這會工作嗎? –