1. java常見隊列:
(1) ArrayBlockingQueue:
一個基於數組結構的有界阻塞隊列, FIFO(先進先出)。
(2) LinkedBlockingQueue:
一個基於鏈表結構的阻塞隊列, 此隊列按FIFO (先進先出) 排序元素,
吞吐量通常要高於ArrayBlockingQueue,
靜態工廠方法 Executors.newFixedThreadPool() 使用了這個隊列。
(3) SynchronousQueue:
一個不存儲元素的阻塞隊列。
每個插入操作必須等到另一個線程調用移除操作,
否則插入操作一直處於阻塞狀態,
吞吐量通常要高於LinkedBlockingQueue, 靜態工廠方法 Executors.newCachedThreadPool() 使用了這個隊列。
(4) PriorityBlockingQueue:
一個具有優先級的無限阻塞隊列。
2. LinkedBlockingQueue使用示例
public final static BlockingQueue<JSONObject> DATA_QUEUE = new LinkedBlockingQueue<>();
// 向隊列中插入消息
public void upsertClinicStructData(JSONObject paramJson) {
try {
CLINIC_DATA_QUEUE.put(paramJson);
} catch (InterruptedException e) {
log.warn(CLINIC_DATA_QUEUE + " 隊列保存數據異常! paramJson: " + paramJson, e);
}
}
/**
* 消費隊列數據
*/
public void consmrClinicDataQueue() {
List<JSONObject> list = Lists.newArrayList();
DATA_QUEUE.drainTo(list, 1000);
if (list.size() < 1) {
log.debug(DATA_QUEUE + "隊列元素爲空");
return;
}
log.info("從隊列取出數據數目: " + list.size());
// list處理邏輯
...
}