我正在開發使用Java EE開發的基於多線程的Web應用程序。主題:讓消費者線程僅在數據更改時纔讀取數據
我在該應用程序內有兩個線程,類似於生產者和消費者,其中一個線程連續從第三方API(Socket連接)讀取數據,並將其更新到緩存。另一個線程(消費者)不斷嘗試從緩存中讀取數據。
我的問題是,如果有什麼方法可以改善消費者線程的性能(我的意思是它只從緩存中讀取數據),並且只有數據發生變化。
我正在開發使用Java EE開發的基於多線程的Web應用程序。主題:讓消費者線程僅在數據更改時纔讀取數據
我在該應用程序內有兩個線程,類似於生產者和消費者,其中一個線程連續從第三方API(Socket連接)讀取數據,並將其更新到緩存。另一個線程(消費者)不斷嘗試從緩存中讀取數據。
我的問題是,如果有什麼方法可以改善消費者線程的性能(我的意思是它只從緩存中讀取數據),並且只有數據發生變化。
當然,請使用BlockingQueue(例如選擇一個實現,如ArrayBlockingQueue
)。它將阻止(掛起)呼叫take
的消費者,直到緩衝區中有數據可用。
有很多方法可以做。
生產者 - 消費者隊列(又名Tudor建議的Java中的BlockingQueue)是一種方法。
您也可以使用wait()/ notify(),以便消費者等待對象,並且生產者在更新時通知消費者。從Java5開始,你甚至可以使用Condition來達到這個目的。
#1:在數據中定義* change *。即每次發生變化時'緩存'會發生什麼變化*?是否有新的記錄添加到'緩存'需要處理? #2:爲什麼它是'緩存'?聽起來像你應該使用一個隊列。 #3:你目前的實施是什麼樣的? – ArjunShankar