ConcurrentLinkedQueue
线程安全、可高效读写的队列,高并发下性能最好的队列。底层采用链表。
无锁、才用了CAS比较交换算法,修改的方法包含三个核心参数(V,E,N)
V:要更新的值;E:预期值;N:新值。
只有当V==E时,V=N。否则表示已经被更新过,则取消当前操作。
代码演示
public static void main(String[] args) throws Exception { //创建安全队列 ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<>(); //多线程执行如对操作 Thread t1 = new Thread(() -> { for (int i = 0; i < 5; i++) { queue.offer(i); } }); Thread t2 = new Thread(() -> { for (int i = 6; i < 10; i++) { queue.offer(i); } }); //线程启动 t1.start(); t2.start(); //使用join保证多线程执行完毕之后才做后续操作 t1.join(); t2.join(); //出队操作 System.out.println("开始出队..."); int size = queue.size(); for (int i = 0; i < size; i++) { System.out.println(queue.poll()); } }
输出结果:
开始出队... 0 6 1 2 7 3 8 4 9
因为多线程并行的原因,所以不能保证添加顺序。

浙公网安备 33010602011771号