一個線程往隊列里插東西,一個線程讀東西,當隊列是空的時候總是輪空,發現占用了大量的 cpu ,通過 yeild 沒有改善,通過 sleep(1) 就好了,但是這樣影響性能。所以,我想換一個插入是總是直接成功,但是讀取是阻塞的隊列。java 里有沒有現成的?
2 回答

吃雞游戲
TA貢獻1829條經驗 獲得超7個贊
現成的不知道有沒有,自己實現的話可以用信號量。
另外你目前sleep的實現方式應該沒什么問題的,對效率的影響很有限。其實阻塞在底層實現是也是sleep的,只不過時間更短。

qq_遁去的一_1
TA貢獻1725條經驗 獲得超8個贊
java.util.concurrent.LinkedBlockingQueue
?樓主可以直接使用這個隊列,是線程安全的。
queue.take()
?獲取數據,如果當前沒有數據,則阻塞直到返回可用數據queue.poll()
?獲取數據,如果當前沒有數據,返回null
queue.pool(timeout, TimeUnit)
?獲取數據,如果沒有數據,阻塞一定的時間后如果有數據直接返回,沒有則返回null
樓主這個是典型的生產者/消費者模式
添加回答
舉報
0/150
提交
取消