2016-04-22 169 views
0

我在一個簡單的生產者 - 消費者場景中管理一個LinkedBlockingQueue 2線程。LinkedBlockingQueue - 生產者/消費者

在消費者線程中,我使用take()即我想在元素進入隊列時阻止使用者。

如果在生產者線程中,我使用offer()添加到隊列中,而不是put()?會導致任何問題嗎?

我的意思是,使用take()意味着我應該也使用put

我想不是,但我想完全確定。

回答

1

不,使用offer對生產者沒有任何問題,無論您在消費者端使用什麼。

這將是一個常見的機制,允許生產者推送到其中一個隊列,它可以在每個隊列上調用offer,直到成功。它甚至可以在最後一個隊列上調用put

0

offerput唯一的區別,put將等待隊列已滿,有空間,同時offer(可選超時)將簡單地返回false(不添加項)如果隊列已滿(和add會拋出一個例外)。

只要您的代碼尊重這些差異,那麼您使用哪種方法都沒有問題(儘管當然,有時候某個方法對某個任務更好)。