2012-09-17 57 views
0

我正在開發使用Java EE開發的基於多線程的Web應用程序。主題:讓消費者線程僅在數據更改時纔讀取數據

我在該應用程序內有兩個線程,類似於生產者和消費者,其中一個線程連續從第三方API(Socket連接)讀取數據,並將其更新到緩存。另一個線程(消費者)不斷嘗試從緩存中讀取數據。

我的問題是,如果有什麼方法可以改善消費者線程的性能(我的意思是它只從緩存中讀取數據),並且只有數據發生變化。

+0

#1:在數據中定義* change *。即每次發生變化時'緩存'會發生什麼變化*?是否有新的記錄添加到'緩存'需要處理? #2:爲什麼它是'緩存'?聽起來像你應該使用一個隊列。 #3:你目前的實施是什麼樣的? – ArjunShankar

回答

2

當然,請使用BlockingQueue(例如選擇一個實現,如ArrayBlockingQueue)。它將阻止(掛起)呼叫take的消費者,直到緩衝區中有數據可用。

+0

即使我使用BlockingQueue,它是如何阻止我的線程執行連續輪詢,因爲所有這些都是在該線程的一段時間(true)條件內發生的。請指教 。 – Pawan

+0

@Preethi Jain:如果您在阻塞隊列中調用'take'並且沒有項目,則調用線程將自動阻塞,直到隊列中出現某些內容。沒有必要進行投票。 – Tudor

+0

感謝都鐸王朝,所以我可以使用阻塞隊列進行管理,並且無需在線程中使用等待和通知方法? – Pawan

0

有很多方法可以做。

生產者 - 消費者隊列(又名Tudor建議的Java中的BlockingQueue)是一種方法。

您也可以使用wait()/ notify(),以便消費者等待對象,並且生產者在更新時通知消費者。從Java5開始,你甚至可以使用Condition來達到這個目的。

相關問題