消息隊列可食用Queue來實現消息隊列, Queue可以分爲三類:
雙端隊列(Deque): 是Queue的子類也是Queue的補充類,頭部和尾部都支持元素插入和獲取
阻塞隊列:在元素操作時(添加或刪除),如果沒有成功,會阻塞等待執行, eg: 如果 添加元素時,隊列元素已滿,隊列則會阻塞等待直到有空位時再插入
非阻塞隊列: 同阻塞隊列相反,它會直接返回操作的結果,而非阻塞等操作,雙端對列也屬於非阻塞隊列.
/**
* 自定義消息隊列
* @author xulihui
* @date 2020/4/12 18:50
*/
public class CustomQueue {
// 定義消息隊列
private static Queue<String> queue = new LinkedList<>();
//生產者
private static void producer() {
// 添加消息
queue.add("1");
queue.add("2");
queue.add("3");
}
public static void consumer() {
while (!queue.isEmpty()) {
/**
* Queue 中 remove() 和 poll()都是用來從隊列頭部刪除一個元素。
* 在隊列元素爲空的情況下,remove() 方法會拋出NoSuchElementException異常,poll() 方法只會返回 null 。
*/
System.out.println(queue.poll());
}
}
public static void main(String[] args) {
// 調用生產者
producer();
// 調用消費者
consumer();
}
}