java.util.concurrent.Queue 并发队列

1. ConcurrentLinkedQueue

Queue的一个线程安全实现,见下:
public class ConcurrentLinkedQueue<E> extends AbstractQueue<E>   implements Queue<E>, java.io.Serializable {}

2.BlockingQueue 阻塞队列

这是一个线程安全的接口,见下:

public interface BlockingQueue<E> extends Queue<E>

它的一些常用方法见下:

void java.util.concurrent.BlockingQueue.put(E e)

put方法在队列满的时候会阻塞,直到有队列成员被消费。

E java.util.concurrent.BlockingQueue.take()

take方法在队列空的时候会阻塞,直到有队列成员被放进来。

int java.util.concurrent.BlockingQueue.drainTo(Collection<? super E> c)

把队列中的元素倾倒给实参c。适用于生产者一直生产,消费者定时消费的场景。如果消费者的消费行为是IO操作,那么定时可以达到缓存效果,节省IO。

它有两个实现类,LinkedBlockingQueue与ArrayBlockingQueue。

2.1 LinkedBlockingQueue

public class LinkedBlockingQueue<E> extends
AbstractQueue<E>  implements BlockingQueue<E>, java.io.Serializable {}

由于LinkedBlockingQueue实现是线程安全的,实现了先进先出等特性,是作为生产者消费者的首选。LinkedBlockingQueue 可以指定容量,也可以不指定,不指定的话,默认最大是Integer.MAX_VALUE。

2.2 ArrayBlockingQueue

它是阻塞队列的另外一个实现,见下:

public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable {}

时间: 2024-07-28 12:37:55

java.util.concurrent.Queue 并发队列的相关文章

java.util.concurrent解析——AbstractQueuedSynchronizer队列管理

上一篇博客中,我们提到AQS的队列管理是基于CLH锁队列实现的,所以首先我们来看下CLH锁队列. 1 CLH锁队列 CLH锁队列本质上是一个基于链表的FIFO自旋锁队列,队列中的每一个节点实质上是一个自旋锁:在阻塞时不断循环读取状态变量,当前驱节点释放同步对象使用权后,跳出循环,执行同步代码.其基本结构如下: 队列中每一个节点有两个成员: 节点状态变量 前驱指针:pred head,tail并不是实际节点,只是为了表示队列的首尾,被称为dumb node. 在如此结构之下,其enqueue操作逻

Java 并发工具包 java.util.concurrent 用户指南

译序 本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新:http://tutorials.jenkov.com/java-util-concurrent/index.html. 本指南已做成中英文对照阅读版的 pdf 文档,有兴趣的朋友可以去 Java并发工具包java.util.concurrent用户指南中英文对照阅读版.pdf[带书签] 进行下载. 1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平

【JAVA秒会技术之多线程】Java 并发工具包 java.util.concurrent 用户指南

1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Java 的并发编程变得更加简单轻松的类.在这个包被添加以前,你需要自己去动手实现自己的相关工具类.本文我将带你一一认识 java.util.concurrent 包里的这些类,然后你可以尝试着如何在项目中使用它们.本文中我将使用 Java 6 版本,我不确定这和 Java 5 版本里的是否有一些差异.

为什么java.util.concurrent 包里没有并发的ArrayList实现?

原文链接 作者:Stephen C 译者:郑旭东  校对:方腾飞 问:JDK 5在java.util.concurrent里引入了ConcurrentHashMap,在需要支持高并发的场景,我们可以使用它代替HashMap.但是为什么没有ArrayList的并发实现呢?难道在多线程场景下我们只有Vector这一种线程安全的数组实现可以选择么?为什么在java.util.concurrent 没有一个类可以代替Vector呢? 答:我认为在java.util.concurrent包中没有加入并发的

为什么java.util.concurrent 包里没有并发的ArrayList实现

原文链接 作者:Stephen C 译者:郑旭东  校对:方腾飞 问:JDK 5在java.util.concurrent里引入了ConcurrentHashMap,在需要支持高并发的场景,我们可以使用它代替HashMap.但是为什么没有ArrayList的并发实现呢?难道在多线程场景下我们只有Vector这一种线程安全的数组实现可以选择么?为什么在java.util.concurrent 没有一个类可以代替Vector呢? 答:我认为在java.util.concurrent包中没有加入并发的

关于java.util.concurrent您不知道的 5 件事,第1部分

通过并发 Collections 进行多线程编程 Concurrent Collections 是 Java 5 的巨大附加产品,但是在关于注释和泛型的争 执中很多 Java 开发人员忽视了它们.此外(或者更老实地说),许多开发人员避免使用这个 数据包,因为他们认为它一定很复杂,就像它所要解决的问题一样. 事实上,java.util.concurrent 包含许多类,能够有效解决普通的并发问题,无需复杂工 序.阅读本文,了解 java.util.concurrent 类,比如 CopyOnWri

java.util.concurrent包源码阅读(一) 源码包的结构

准备花点时间阅读一下java.util.concurrent这个包里面的java代码,大致看了一下,这个包我个人觉得大致可以分为五个部分(如有不对之处,还望指正) 第一部分 Aomic数据类型 这部分都被放在java.util.concurrent.atomic这个包里面,实现了原子化操作的数据类型,包括 Boolean, Integer, Long, 和Referrence这四种类型以及这四种类型的数组类型. 第二部分 锁 这部分都被放在java.util.concurrent.lock这个包

Java7 java.util.concurrent 并发包计划

原文链接,译文链接,译者:DOM,校对:郑旭东  Java7发布版本的具体计划应该开始了,之前经常有人问我们关于JSR166的后续计划包含哪些内容.下面是目前暂定的内容,欢迎提出你们的见 解和意见. 1.Phasers    一个通用的内存屏障实现. 2.LinkedTransferQueue (and TransferQueue interface)   一个具有非阻塞,阻塞和同步接口的队列. 3. ConcurrentReferenceHashMap   并发Hash Map,其键和值可以是

java.util.concurrent解析——AbstractQueuedSynchronizer综述

尽管JVM在并发上已经做了很多优化工作,如偏向锁.轻量级锁.自旋锁等等.但是基于Synchronized wait notify实现的同步机制还是无法满足日常开发中.原生同步机制在时间和空间上的开销也一直备受诟病.为了提升Java程序在并发场景下的性能.扩展性和健壮性,java.util.concurrent的使用必不可少.java.util.concurrent 包含许多线程安全.测试良好.高性能的并发构建块.通过使用java.util.concurrent,开发人员可以提高并发类的线程安全.