我在一個簡單的生產者 - 消費者場景中管理一個LinkedBlockingQueue
2線程。LinkedBlockingQueue - 生產者/消費者
在消費者線程中,我使用take()
即我想在元素進入隊列時阻止使用者。
如果在生產者線程中,我使用offer()
添加到隊列中,而不是put()
?會導致任何問題嗎?
我的意思是,使用take()
意味着我應該也使用put
?
我想不是,但我想完全確定。
我在一個簡單的生產者 - 消費者場景中管理一個LinkedBlockingQueue
2線程。LinkedBlockingQueue - 生產者/消費者
在消費者線程中,我使用take()
即我想在元素進入隊列時阻止使用者。
如果在生產者線程中,我使用offer()
添加到隊列中,而不是put()
?會導致任何問題嗎?
我的意思是,使用take()
意味着我應該也使用put
?
我想不是,但我想完全確定。
不,使用offer
對生產者沒有任何問題,無論您在消費者端使用什麼。
這將是一個常見的機制,允許生產者推送到其中一個隊列,它可以在每個隊列上調用offer
,直到成功。它甚至可以在最後一個隊列上調用put
。
offer
和put
唯一的區別,put
將等待隊列已滿,有空間,同時offer
(可選超時)將簡單地返回false(不添加項)如果隊列已滿(和add
會拋出一個例外)。
只要您的代碼尊重這些差異,那麼您使用哪種方法都沒有問題(儘管當然,有時候某個方法對某個任務更好)。