我有一個進程,其中多個生產者填充隊列和單個使用者進程從其隊列中檢索的數據。帶有超時的排水隊列
爲了提高效率消費者從隊列中使用BlockingQueue#drainTo
API排出數據。但有一個問題,當隊列爲空時,消費者會嘗試在循環中耗盡數據,而不會延遲消耗大量CPU。
是否有API允許排隊隊列超時類似於BlockingQueue#poll(long timeout, TimeUnit unit)
?
示例代碼消費:
while (threadIsActive) {
List<Event> events = new ArrayList<>();
queue.drainTo(events);
processEvents(events);
}
因此,您的方法最終導致性能惡化。 – Kayaman
並非如此,大部分時間隊列不是空的,並且這種方法改善了高負載時段處理。現在我想在系統不負載時提高CPU消耗。 – hoaz
然後在隊列爲空時執行'poll()'。 – Kayaman