zoukankan      html  css  js  c++  java
  • java concurrent 之 SynchronousQueue

    Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。

    不像ArrayBlockingQueue或LinkedListBlockingQueue,SynchronousQueue内部并没有数据缓存空间,你不能调用peek()方法来看队列中是否有数据元素,因为数据元素只有当你试着取走的时候才可能存在,不取走而只想偷窥一下是不行的,当然遍历这个队列的操作也是不允许的。队列头元素是第一个排队要插入数据的线程,而不是要交换的数据。数据是在配对的生产者和消费者线程之间直接传递的,并不会将数据缓冲数据到队列中。可以这样来理解:生产者和消费者互相等待对方,握手,然后一起离开。

    补充:

    • ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
    • LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。
    • PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
    • DelayQueue:一个使用优先级队列实现的无界阻塞队列。
    • SynchronousQueue:一个不存储元素的阻塞队列。
    • LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
    • LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
  • 相关阅读:
    yii2 模型查询使用计算值
    git回滚操作
    yii2 模型搜索时 or 条件查询
    从一台服务器发送文件到另一台服务器
    学习swoft的第三天_AOP切面
    C面试题汇总(转)
    秒杀多线程:多线程笔试面试题汇总(转)
    链表的常见操作(转)
    YAFFS跟踪
    libusb开发指南
  • 原文地址:https://www.cnblogs.com/qiumingcheng/p/5452254.html
Copyright © 2011-2022 走看看