n個線程產生到BlockingQueue
。 當隊列已滿時,消費者會排空隊列並執行一些處理。阻塞隊列設計
我應該如何決定以下兩種實施方式?
選擇A: 消費者定期輪詢隊列以檢查它是否已滿,所有寫入者正在等待(畢竟這是一個阻塞隊列:)。
選擇B: 我使用同步的「put」方法實現自己的隊列。在放置提供的元素之前,我測試隊列是否接近滿(全部減1元素)。然後,我把這個元素,並通知我的消費者(正在等待)。
第一種解決方案是最簡單的方法,但可以進行輪詢;這讓我很煩惱。 第二種解決方案在我看來更容易出錯,更多需要更多編碼。
您還可以使用其他方式來溝通「開始處理」,例如, CountdownLatch。此外,爲什麼消費者不能只獲取所有元素,並決定何時自行開始處理它們(例如在擁有N個元素之後?) –
然後,我的消費者會消耗所有元素,並在達到特定數量時元素,他處理它們。 在這種情況下,他會一直工作,並試圖達到極限 我喜歡那個:)我會試試看看它是如何工作的... –