ConcurrentLinkedQueue的簡單使用
它是一個基於連結節點的無界執行緒安全佇列。該佇列的元素遵循先進先出的原則。頭是最先加入的,尾是最近加入的。插入元素是追加到尾上。提取一個元素是從頭提取。當多個執行緒共享訪問一個公共 collection 時,ConcurrentLinkedQueue 是一個恰當的選擇。該佇列不允許null元素
大致是這樣的思路,使用者請求介面 將使用者的請求方到 ConcurrentLinkedQueue 中去。然後按照順序一個一個 去處理使用者的請求
主要用到了 幾個方法
offer(E e)
將指定元素插入此佇列的尾部。
poll()
獲取並移除此佇列的頭,如果此佇列為空,則返回 null。
isEmpty()
如果此佇列不包含任何元素,則返回 true
新增和讀取元素的 方法不多說。 很簡單 , 完事是消費佇列裡的任務了
@PostConstruct
public void consumer() throws InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(1);
executor.submit(new Runnable() {
@Override
public void run() {
while (true){
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
while (!pullist.isEmpty()) {
Map<String, Object> map = (Map<String, Object>) pullist.poll();
try{
/*這裡寫業務邏輯*/
}catch (Exception e){
continue;
}
}
}
}
});
}
在controller 初始化的時候 開一個執行緒 ,去迴圈讀取佇列裡的訊息。 如果沒有訊息 就睡一會。
注意就是在判斷佇列是否為空的時候 不要使用.size 方法去獲取長度完事判斷是否為空。因為.size方法會遍歷整個佇列。 應該直接使用isEmpty 方法
相關文章
- Kdevelop的簡單使用和簡單除錯dev除錯
- RocketMQ的簡單使用MQ
- OD的簡單使用
- Flatbuffer的簡單使用
- docker的簡單使用Docker
- SXSSFWorkbook的簡單使用
- peewee的簡單使用
- LayUi的簡單使用UI
- Vue簡單的使用Vue
- uuid的簡單使用UI
- git的簡單使用Git
- RecyclerView的簡單使用View
- postman的簡單使用Postman
- Handler的簡單使用
- shell script的簡單使用
- vue框架的簡單使用Vue框架
- 協程的簡單使用
- react hooks 的簡單使用ReactHook
- Mackdown簡單的使用教程Mac
- matplotlib簡單的使用(二)
- Maven 私服的簡單使用Maven
- 使用tensorboard的簡單方法ORB
- 併發程式設計ConcurrentLinkedQueue使用示例詳解程式設計
- Java JUC ConcurrentLinkedQueue解析Java
- git簡單使用Git
- OpenFeign簡單使用
- jq 簡單使用
- Quartz 簡單使用quartz
- LinqPad簡單使用
- kvm簡單使用
- 簡單使用 rocketmqMQ
- Badger簡單使用
- Drozer簡單使用
- Github 簡單使用Github
- mogilefs簡單使用
- kustomize簡單使用
- apijson簡單使用APIJSON
- 簡單使用autossh