队列可分为两种,一种是阻塞队列,一种是非阻塞队列。

阻塞队列和非阻塞队列的区别:阻塞队列可以阻塞,非阻塞队列不能阻塞,只能使用队列wait(),notify()进行队列消息传送。而阻塞队列当队列里面没有值时,会阻塞直到有值输入。输入也一样,当队列满的时候,会阻塞,直到队列不为空。

自从Java 1.5之后,在java.util.concurrent包下提供了若干个阻塞队列,主要有以下几个:

ArrayBlockingQueue:
基于数组实现的一个阻塞队列,在创建ArrayBlockingQueue对象时必须制定容量大小。并且可以指定公平性与非公平性,默认情况下为非公平的,即不保证等待时间最长的队列最优先能够访问队列

LinkedBlockingQueue
基于链表实现的一个阻塞队列,在创建LinkedBlockingQueue对象时如果不指定容量大小,则默认大小为Integer.MAX_VALUE。

PriorityBlockingQueue:
它会按照元素的优先级对元素进行排序,按照优先级顺序出队,每次出队的元素都是优先级最高的元素。注意,此阻塞队列为无界阻塞队列,即容量没有上限(通过源码就可以知道,它没有容器满的信号标志),前面2种都是有界队列

DelayQueue:
一种延时阻塞队列,DelayQueue中的元素只有当其指定的延迟时间到了,才能够从队列中获取到该元素。DelayQue

阻塞和非阻塞队列下两种生产者消费者实现相关推荐

  1. linux下recv 、send阻塞、非阻塞区别和用法

    非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明:        基本概念: 阻塞IO:: socket 的阻塞模 ...

  2. Java多线程学习二十五:阻塞和非阻塞队列的并发安全原理||如何选择适合自己的阻塞队列?

    阻塞和非阻塞队列的并发安全原理. 之前我们探究了常见的阻塞队列的特点,以 ArrayBlockingQueue 为例, 首先分析 BlockingQueue 即阻塞队列的线程安全原理,然后再看看它的兄 ...

  3. linux下的阻塞和非阻塞

            读常规文件是不会阻塞的,不管读多少字节,read 一定会在有限的时间内返回.从终 端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用 read 读终端设备就会 阻塞,如果网络 ...

  4. 【Linux网络编程学习】阻塞、非阻塞、同步、异步以及五种I/O模型

    文章目录 1. 基本概念 1.1 阻塞与非阻塞 1.2 同步与异步 1.3 为什么没有"异步阻塞" 2. 五种IO模型 2.1 阻塞 blocking 2.2 非阻塞 non-bl ...

  5. 阻塞和非阻塞、同步和异步 、五种IO模型

    阻塞和非阻塞,同步和异步 1 例子 故事:老王烧开水. 出场人物:老张,水壶两把(普通水壶,简称水壶:会响的水壶,简称响水壶). 老王想了想,有好几种等待方式 1.老王用水壶煮水,并且站在那里,不管水 ...

  6. Linux下connect函数 阻塞 与 非阻塞 问题

    一.概述 linux系统下,connect函数是阻塞的,阻塞时间的长度与系统相关.而如果把套接字设置成非阻塞,调用connect函数时会报错Operation now in progress,且err ...

  7. 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值

    recv: 阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小, 特别:非阻塞模式下返回 值 <0时并且(errno == EINTR || e ...

  8. connect函数在阻塞和非阻塞模式下的行为

    connect函数在阻塞和非阻塞模式下的行为 当socket使用阻塞模式时,connect函数会阻塞到有明确结果才会返回,如果网络环境较差,可能要等一会,影响体验, 为了解决这个问题,我们使用异步co ...

  9. socket的阻塞模式和非阻塞模式(send和recv函数在阻塞和非阻塞模式下的表现)

    socket的阻塞模式和非阻塞模式 无论是Windows还是Linux,默认创建socket都是阻塞模式的 在Linux中,可以再创建socket是直接将它设置为非阻塞模式 int socket (i ...

最新文章

  1. 我同事说我写代码像写诗
  2. 关于PHP Session 的配置与启动问题解决
  3. Swift 懒性属性
  4. 使用 ABAP 控制 Android 原生应用
  5. JS基础篇--函数声明与定义,作用域,函数声明与表达式的区别
  6. openshift_为Openshift + MongoDb应用程序编写验收测试
  7. springcloud 网关_Spring Cloud 系列之 Netflix Zuul 服务网关(二)
  8. layui基础上的tree菜单动态渲染;
  9. 项目Beta冲刺(团队)第七天
  10. Apache Spark Jobs 性能调优(一)
  11. PHP JSON中文乱码解决方法大全
  12. oracle job 与存储过程,讲解Oracle中JOB与存储过程的接合用法
  13. catia装配体怎么把零件旋转180度_工件180度翻转装置的设计
  14. 如何用python获取沪深300历年成分股的行情数据
  15. 5-27 家谱处理 (30分)
  16. 活血化瘀药题库【1】
  17. 程序员养生书单,九本必读养生书籍,颈椎按摩,脊椎按摩,脱发植发
  18. 【excel实战】-- 批量提取批注多重区域复制粘贴
  19. 上网行为管理设备网关部署方式
  20. 注册表删除卸载列表中的软件

热门文章

  1. android 开源项目列表【持续整理中。。。】
  2. Linq to sql 结合Entity Framework 的连接查询总结
  3. c#中Split分割字符串的几种方法
  4. Redis内核原理及读写一致企业级架构深入剖析1-综合组件环境实战
  5. oracle导出用户下单表或者多表,导入到别的服务器用户下
  6. npm上传自定义vue组件入门
  7. 使用phpize建立php扩展(Cannot find config.m4)
  8. 各数据库连接配置与maven依赖安装
  9. NFS网络文件系统服务配置、验证及错误解决
  10. 再谈拍照,OPPO这次拿什么和iPhone7拼?