java常見隊列及應用詳解

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處理邏輯
	...
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章