java多线程之ConcurrentLinkedQueue

本文深入探讨了ConcurrentLinkedQueue的特性和用法,这是一种基于链接节点的无界线程安全队列,遵循FIFO原则。文章通过示例代码展示了如何进行元素的插入、获取、检查等操作,并强调了其在多线程环境下共享访问集合的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

一个基于链接节点的无界线程安全队列。此队列按照 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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值