BlockingQueue 的介紹和使用
作用
BlockingQueue為一個阻塞佇列,這裡的阻塞有兩個含義
- 從佇列中獲取元素時,如果佇列為空,獲取元素的執行緒會等待至佇列中有元素再返回。
- 往佇列新增元素時,如果佇列已滿,新增元素的佇列會等待至佇列有位置的時候再新增新的元素
特點
- BlockingQueue中的元素不能為空
- 為執行緒安全的,但是涉及到批量操作時就不一定是原子操作。比如addAll,removeAll這種。
- 可以用來實現生產者-消費者佇列的,並且支援多消費者和多生產者。當然也可以用來當作普通的Collection來使用,因為他實現了java.util.Collection介面。
- 有界佇列,並不是真正的無界佇列,他的最大值為Integer.MAX_VALUE.
使用
在BlockingQueue中有多種插入刪除和獲取元素的方法。每種方法都會有不同的作用,下面會介紹BlockingQueue的幾個核心方法
插入元素
- boolean add(E e):如果佇列中有空間,立即插入一個元素到佇列中,並返回true。如果佇列中沒有空間了,就會丟擲IllegaStateException異常。對於遊街佇列,更常用的是使用offer方法。
- boolean offer(E e):如果佇列中有空間,立即插入一個元素到佇列中,並返回true,如果沒有空間則返回false。
- void put(E e):插入一個元素到佇列中,如果該佇列當前已滿,則該方法會一隻阻塞,直到有位置可以新增後才會繼續執行。
- boolean offer(E e,long timeout,TimeUnit unit):插入一個元素到佇列中,如果佇列已滿則等待timeout時長,插入成功並返回true,超時則返回false.
獲取元素
- E take():獲取列頭部的第一個元素,並在佇列中移除,如果佇列中沒有元素,則會一直等待直到有元素來返回。
- E poll(long timeout,TimeUnit unit): 取得佇列頭部的第一個元素,並講它從佇列中移除,如果佇列中沒有元素會等待timeout時常。
移除元素
- boolean remove(Object o):從佇列中移除指定的元素(當佇列中存在這個元素時),判斷方式equals方法。如果移除的元素和佇列中元素的型別不一樣,就會丟擲ClassCastException異常,如果佇列中有多個元素,就會移除掉最先超乳到佇列中的那一個。
檢索一個元素
- E remove():檢索出佇列中頭部第一個元素,但是不會刪除,如果佇列為空則丟擲NoSuchElemenException異常
- E peel(): 也是用來檢索佇列中的第一個元素,也不會刪除,如果佇列為空的時候,不會丟擲異常而是返回null。
相關文章
- LayerMask 的介紹和使用
- web worker的介紹和使用Web
- Redis介紹和使用Redis
- The Graph介紹和使用
- clang-format的介紹和使用ORM
- Web Storage API的介紹和使用WebAPI
- ddddocr基本使用和介紹
- Python JWT 介紹和使用PythonJWT
- iOS Runtime介紹和使用iOS
- langchain中的chat models介紹和使用LangChain
- Google guava工具類的介紹和使用GoGuava
- 【Linux】jq 命令介紹和使用Linux
- Charles 功能介紹和使用教程
- ccs的介紹,安裝和使用入門
- Hbase原理的介紹和使用場景分析
- babel-runtime和babel-polyfill的介紹和使用Babel
- Linux常用初級指令介紹和使用Linux
- vuex詳細介紹和使用方法Vue
- certutil工具的使用介紹
- LangChain的Agent使用介紹LangChain
- lightdb的merge into使用介紹
- layui 的基本使用介紹UI
- JQuery的介紹與使用jQuery
- Graph Explore的使用介紹
- XML和JSON的介紹XMLJSON
- HTTPS 和HTTP的介紹HTTP
- 原始碼管理工具——GitHub的介紹和使用原始碼Github
- saltstack使用介紹
- Tmux使用介紹UX
- Github使用介紹Github
- CMinpack使用介紹
- Go彙編語法和MatrixOne使用介紹Go
- markdown介紹和使用(超全建議收藏)
- Nacos使用和註冊部分原始碼介紹原始碼
- Material Design - 常用控制元件介紹和使用Material Design控制元件
- xtrabackup 2.4 的介紹與使用
- FastAPI 的路由介紹與使用ASTAPI路由
- item的介紹與使用-2.0