`
nannan408
  • 浏览: 1783248 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jdk1.5后增加的线程安全的队列ConcurrentLinkedQueue的用法

阅读更多
1.最简单的Helloworld.
需要注意的是这个size()也是不同步的,和list一样,要得到需要遍历一次。
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;


public class testConcurrentLinkedQueue {
   public static void main(String[] args) {
   Queue<String> queue=new ConcurrentLinkedQueue<String>();
   queue.add("aa");
   queue.add("bb");
   queue.add("cc");
   queue.add("dd");
   queue.add("ee");
   System.out.println(queue.poll());
   System.out.println(queue.poll());
   System.out.println(queue.poll());
   System.out.println(queue.poll());
   System.out.println(queue.poll());
   System.out.println(queue.poll());   
}
}
2.含有优先级的,缺点优先级越多,分支越多。
import java.util.PriorityQueue;
import java.util.concurrent.ConcurrentLinkedQueue;

public class PriorityQueueTest {

    public static void main(String[] args) {
        ConcurrentLinkedQueue<String> highPriority = new ConcurrentLinkedQueue<String>(); //高优先级
        ConcurrentLinkedQueue<String> lowPriority = new ConcurrentLinkedQueue<String>();  //低优先级
        
        highPriority.add("aaa");
        highPriority.add("bbb");
        highPriority.add("111");
        
        lowPriority.add("ccc");
        lowPriority.add("ddd");
        lowPriority.add("222");
        
        int i = 0 ,j = 0, k=0;
        while(true){
            while(true){
                if(!highPriority.isEmpty()){
                    System.out.print(highPriority.remove());
                    i++;
                    k++;
                    System.out.println(", i = "+i+", k="+k);
                    break;
                }
                if(!lowPriority.isEmpty()){
                    System.out.print(lowPriority.remove());
                    j++;
                    k++;
                    System.out.println(", j = "+j+", k="+k);
                    break;
                }
                break;
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
分享到:
评论

相关推荐

    Java-jdk10-最新最全多线程编程实战指南-核心篇

    4. **并发集合**:讲解ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue等并发安全的集合类,以及它们在多线程环境下的性能优势。 5. **线程通信**:介绍wait()、notify()和notifyAll()方法,以及...

    jdk1.8压缩包下载

    7. **并发更新集合**:`ConcurrentHashMap`和`ConcurrentLinkedQueue`等并发集合的性能得到了提升,增加了新的操作,如`putIfAbsent`和`computeIfAbsent`,在多线程环境中提供了更加高效的数据处理。 8. ** Nashorn...

    深入浅出Java多线程.pdf

    - **ConcurrentLinkedQueue**:线程安全的链表队列,适用于大量线程并发的情况。 - **CopyOnWriteArrayList**:通过复制底层数组的方式实现写操作,适用于读多写少的场景。 **16. CopyOnWrite** - **CopyOnWrite ...

    JAVA高并发包介绍

    在高并发的场景下,JDK提供的并发包为我们提供了许多支持线程安全的数据结构,这使得在多线程环境下编程变得更加容易和高效。接下来,我们来深入探讨几个在并发编程中经常用到的数据结构,以及它们的概念、原理、...

    jdk 1.8 chm

    另外,添加了新的并发集合类,如ConcurrentSkipListMap和ConcurrentLinkedQueue,提供了线程安全的高效数据结构。 8. **类型注解和反射增强** - 类型注解允许在类型声明(包括参数、返回类型、变量声明等)上使用...

    15个顶级JAVA多线程面试题及回答[文].pdf

    第六,对于JDK5以后引入的java.util.concurrent包下的并发集合,如ConcurrentHashMap、ConcurrentLinkedQueue等,面试官通常会询问其内部工作机制及其与传统集合类的区别。 第七,对于Java并发API中的Executor框架...

    jdk-1.8-API-CHM

    7. **方法引用来替代lambda**:除了lambda表达式,还可以使用方法引用,直接引用已有方法作为函数式接口的实现。 8. **并发更新集合**:并发集合类如ConcurrentHashMap和ConcurrentLinkedQueue等在1.8中得到了优化...

    Java并发编程(学习笔记).xmind

    要避免使用线程优先级,因为这会增加平台依赖性,并可能导致活跃性问题。在大多数并发应用程序中,都可以使用默认的线程优先级。 糟糕的响应性 如果由其他线程完成的工作都是后台任务,那么应该降低...

    jdk-6u38-windows-x64

    Java Development Kit(JDK)是Oracle公司提供的用于开发和运行Java应用程序的重要工具集。这个"jdk-6u38-windows-x64"压缩包包含了针对Windows 64位操作...在迁移到更高版本之前,理解JDK 6的功能和使用方法至关重要。

    jdk api 1.8_China.zip

    2. String类:在JDK 1.8中,String类增加了许多新的实用方法,如`lines()`用于按行分割字符串,`join()`用于连接多个字符串,以及`isBlank()`和`repeat()`等,极大地提高了字符串操作的便利性。 3. 集合框架:JDK ...

    JavaCommon:Java基础用法,集合,线程,JUC,jdk5--8各个版本特性。

    - **并发容器**:如ConcurrentHashMap、ConcurrentLinkedQueue等,线程安全且高效。 - **原子类**:AtomicInteger、AtomicLong等,支持原子操作。 - **线程池**:ExecutorService和ThreadPoolExecutor,管理线程...

    java并发编程-超级大全整理

    - **JDK中的队列实现**:ConcurrentLinkedQueue(高性能非阻塞队列)和BlockingQueue(阻塞队列,包含7种实现)。 - **队列分类**:双端队列(Deque)和单端队列(如LinkedList、ArrayBlockingQueue、...

    java并发编程实践笔记

    25. **使用并发容器:** 在并发编程中,推荐使用JDK提供的并发容器(如`ConcurrentHashMap`, `ConcurrentLinkedQueue`等),这些容器已经实现了线程安全机制,可以直接用于多线程环境。 以上是Java并发编程实践笔记...

    JAVA基础及8个并发面试问题共2页.pdf.zip

    4. **并发容器**:ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue等并发容器的使用,它们是如何保证线程安全的。 5. **线程优先级**:了解Java线程的优先级模型,以及它在实际应用中的作用和限制...

    java并发编程艺术

    5. **线程安全的数据结构**:介绍Java中线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue等,以及它们在并发编程中的应用。 6. **线程间的通信**:讲解wait()、notify()和...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段04讲、线程生命周期以及start方法源码剖析.mp4 │ 高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中...

    java自带并发框架

    - **并发集合(Concurrent Collections)**:如`ConcurrentHashMap`、`ConcurrentLinkedQueue`等,提供了线程安全的数据结构,减少了对锁的依赖,提高了并发性能。 ### 并发策略 在设计并发程序时,需要考虑以下...

    JAVA并发编程实践

    3. **并发集合**:讲解ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue等并发安全集合,它们在多线程环境下的正确使用和优势。 4. **原子变量**:AtomicInteger、AtomicLong等原子类的使用,它们...

    有用的面试题整理.pdf(粉丝 私信 免费领取)

    - HashMap在resize操作时可能存在线程不安全问题,使用ConcurrentHashMap或在多线程环境下加锁解决。 - 单例模式实现线程安全可使用双重检查锁定(DCL)、静态内部类或枚举等方式。 8. **算法题:顺时针打印矩阵*...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段04讲、线程生命周期以及start方法源码剖析.mp4 │ 高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中...

Global site tag (gtag.js) - Google Analytics