SynchronousQueue学习笔记

SynchronousQueue是一个无界但无内部容量的阻塞队列,插入操作必须等待其他线程取走数据。它是线程安全的,分为公平模式和非公平模式。公平模式下,线程按FIFO顺序竞争资源;非公平模式下,顺序不确定,可能导致饥饿现象。SynchronousQueue不支持peek、迭代、添加null元素和有容量的方法,其isEmpty始终为true,remainingCapacity始终为0。它常用于高效传递资源给消费者。
摘要由CSDN通过智能技术生成

1. SynchronousQueue简介

SynchronousQueue是无界的,是一种无缓冲的阻塞队列,插入操作必须等待令一个线程取数据,反之亦然(SynchronousQueue是线程安全的,是阻塞的)。同步队列没有任何内部容量,甚至连一个队列的容量都没有。

PS:什么是线程安全?
线程安全就是说多线程访问同一代码,不会产生不确定的结果。

声明一个SynchronousQueue有两种不同的方式,它们之间有着不太一样的行为。
公平模式:
SynchronousQueue会采用公平锁,并配合一个FIFO队列来阻塞多余的生产者和消费者,从而体系整体的公平策略;

非公平模式(SynchronousQueue默认):
SynchronousQueue采用非公平锁,同时配合一个LIFO队列来管理多余的生产者和消费者,而后一种模式,如果生产者和消费者的处理速度有差距,则很容易出现饥渴的情况,即可能有某些生产者或者是消费者的数据永远都得不到处理。

注意:
(1)不能在同步队列上进行 peek,因为仅在试图要取得元素时,该元素才存在;
(2)除非另一个线程试图移除某个元素,否则也不能(使用任何方法)添加元素;
(3)不能迭代队列
(4)该队列的头

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值