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处理逻辑
...
}