日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

并发编程-concurrent指南-阻塞队列BlockingQueue

發布時間:2023/12/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并发编程-concurrent指南-阻塞队列BlockingQueue 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

阻塞隊列BlockingQueue,java.util.concurrent下的BlockingQueue接口表示一個線程放入和提取實例的隊列。

適用場景:

BlockingQueue通常用于一個線程生產對象,而另一個線程消費對象的場景。

一個線程往里面放,另一個線程從里面取的一個BlockingQueue。

生產線程,一個線程將會持續生產新對象并將其插入到隊列中去,直到隊列達到它所能容納的臨界點。如果該阻塞隊列到達了臨界點,負責生產的線程將會在往里面插入新對象時發生阻塞。它會一個處于阻塞中,直到負責消費的線程從隊列中拿走一個對象。

消費線程,負責消費的線程將會一直從該阻塞隊列中拿出對象。如果消費線程嘗試去從一個空的隊列中提取對象的話,這個消費線程將會處于阻塞之中,直到一個生產線程把一個對象丟進隊列。

BlockingQueue的方法

四組不同的行為方式解釋:

  • 拋異常:如果試圖操作無法立即執行,拋一個異常
  • 特定值:如果試圖操作無法立即執行,返回一個特定的值(true或false)
  • 阻塞:如果試圖操作無法立即執行,該方法調用將會發生阻塞,直到能夠執行
  • 超時:如果試圖操作無法立即執行,該方法調用將會發生阻塞,直到能夠執行,但等待時間不會超過給定值。返回一個特定值以告知該操作是否成功

無法向一個BlockingQueue中插入null。如果試圖插入null,BlockingQueue會拋出一個NullPointException。

可以訪問到 BlockingQueue 中的所有元素,而不僅僅是開始和結束的元素。比如說,你將一個對象放入隊列之中以等待處理,但你的應用想要將其取消掉。那么你可以調用諸如 remove(o) 方法來將隊列之中的特定對象進行移除。但是這么干效率并不高(譯者注:基于隊列的數據結構,獲取除開始或結束位置的其他對象的效率不會太高),因此你盡量不要用這一類的方法,除非你確實不得不那么做。

?

BlockingQueue的實現

BlockingQueue接口的實現類:

  • ArrayBlockingQueue:一個由數組結構組成的有界阻塞隊列
  • DelayQueue:一個使用優先級隊列實現的無界阻塞隊列
  • LinkedBlockingQueue:一個由鏈表結構組成的有界阻塞隊列
  • PriorityBlockingQueue:一個支持優先級排序的無界阻塞隊列
  • SynchronousQueue:一個不存儲元素的阻塞隊列

?

轉載于:https://www.cnblogs.com/qjm201000/p/10136910.html

總結

以上是生活随笔為你收集整理的并发编程-concurrent指南-阻塞队列BlockingQueue的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。