一、簡介
一個基於鏈接節點的無界線程安全隊列。此隊列按照 FIFO(先進先出)原則對元素進行排序。隊列的頭部 是隊列中時間最長的元素。隊列的尾部 是隊列中時間最短的元素。 新的元素插入到隊列的尾部,隊列獲取操作從隊列頭部獲得元素。當多個線程共享訪問一個公共 collection 時,ConcurrentLinkedQueue 是一個恰當的選擇。此隊列不允許使用 null 元素。
二、例子
import java.util.Iterator;
import java.util.concurrent.ConcurrentLinkedQueue;
/**
* 一個基於鏈接節點的無界線程安全隊列。此隊列按照 FIFO(先進先出)原則對元素進行排序。
* 隊列的頭部 是隊列中時間最長的元素。隊列的尾部 是隊列中時間最短的元素。
* 新的元素插入到隊列的尾部,隊列獲取操作從隊列頭部獲得元素。
* 當多個線程共享訪問一個公共 collection 時,ConcurrentLinkedQueue 是一個恰當的選擇。
* 此隊列不允許使用 null 元素。
*/
public class ConcurrentLinkedQueueTest {
public static void main(String[] args) {
//安全隊列(先進先出)
ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<String>();
System.out.println("===================");
queue.offer("e1");//插入元素
System.out.println("peek: "+queue.peek());//取數據不刪除
System.out.println("isEmpty: "+queue.isEmpty());
System.out.println("===================");
System.out.println("poll: "+queue.poll());//取數據並刪除
System.out.println("isEmpty: "+queue.isEmpty());
System.out.println("===================");
queue.offer("e1");
queue.offer("e2");
System.out.println("poll e1: "+queue.poll());//先進先出
System.out.println("poll e2: "+queue.poll());//先進先出
System.out.println("isEmpty: "+queue.isEmpty());
System.out.println("===================");
queue.offer("e1");
System.out.println("contains: "+queue.contains("e1"));
System.out.println("remove: "+queue.remove("e1"));
System.out.println("isEmpty: "+queue.isEmpty());
System.out.println("===================");
queue.offer("a1");
queue.offer("a2");
Object[] sArray = queue.toArray();
System.out.println("toArray: "+sArray[0]+","+sArray[1]);
System.out.println("isEmpty: "+queue.isEmpty());
System.out.println("===================");
Iterator<String> iterator = queue.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println("isEmpty: "+queue.isEmpty());
}
}
三、結果
參考:https://www.cnblogs.com/yangzhenlong/p/8359875.html