ArrayBlockingQueue原理分析-take方法
生活随笔
收集整理的這篇文章主要介紹了
ArrayBlockingQueue原理分析-take方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
take方法是一種阻塞獲取隊列中元素的方法
它的實現原理很簡單,有就刪除沒有就阻塞,注意這個阻塞是可以中斷的,如果隊列沒有數據那么就加入notEmpty條件隊列等待(有數據就直接取走,方法結束),如果有新的put線程添加了數據,那么put操作將會喚醒take線程,執行take操作。
public E take() throws InterruptedException { final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { while (count == 0) notEmpty.await(); //如果隊列為空的情況下,直接通過await方法阻塞 return dequeue(); } finally { lock.unlock(); } }如果隊列中添加了元素,那么這個時候,會在enqueue中調用notempty.signal喚醒take線程來獲得元素
?
總結
以上是生活随笔為你收集整理的ArrayBlockingQueue原理分析-take方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ArrayBlockingQueue原理
- 下一篇: ArrayBlockingQueue原理