2011-07-06 51 views
5

因此,我在生產者/消費者類型應用程序中使用了固定大小的BlockingQueue [ArrayBlockingQueue],但我希望用戶能夠隨時更改隊列大小。問題是沒有一個BlockingQueue實現允許在創建後更改容量。有人曾經遇到過這個?有任何想法嗎?Re-sizeable Java BlockingQueue

回答

1

您可以擴展LinkedBlockingQueue。它的限制是一個軟限制(即只是一個額外的檢查),你可以使這個東西你可以改變(通過禁用內置的一個並把你自己的)

+0

這是不可能的,沒有複製/粘貼很多內部代碼。你真的不得不把電鋸拿到一個單獨的實現中,例如Apache Harmony中的那個。 – jbellis

+0

@jbellis你爲什麼需要將代碼複製到子類中呢? –

+3

您無法通過繼承獲得所需的功能;最後/私人太多了。 – jbellis

2

最明顯的解決方案(可能或可能不是根據您的具體情況而定)應該是簡單地實例化一個新的隊列,其中包含所需的更新容量。然後將舊隊列中的所有內容都推送到新隊列中。

+0

如果這樣做,那麼所有具有對舊隊列的引用的線程都將被阻塞,以等待舊隊列上的新內容而不是新隊列上的新內容。 –

+1

@bkail:這就是爲什麼我說「取決於你的情況。」如果OP有大量的阻塞隊列引用,那麼他需要重構這個解決方案(例如,通過將隊列本身包裝在一個容器對象中,該容器對象在外部充當隊列,但在容量爲改變)。 –