并发BlockingQueue

一.阻塞队列 和并发队列

1.什么是队列
一种支持先进先出(FIFO)的线性数据结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述2.如果让你设计一个线程安全的队列 你会怎么做?
可以用锁,消费者 生产者模式,状态变更 condition
注意去判断的时候要用while (因为等待线程有很多个,你倍唤醒之后不一定是执行成功,可能再次等待)
等待之后 唤醒所有线程去抢

(1)arrayBockingQueue 一把锁要么能取 要么放
a.数组
b.从哪里取的指针
c.从哪里放指针
d. 现有数量
c.锁
d. 队列状态 是否空(condition) 空了等待
e.队列状态 是否满(condition ) 满了等待

(2)linkedBockingQueue 取或者放不影响
a.队列
b.要设计的队列长度 (参数)
c. 现有数量atomicInteger
d.put锁
e.get 锁
f. 队列状态 是否空(condition) 空了等待
g.队列状态 是否满(condition ) 满了等待

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

fale share (伪共享)
就是两个数据是相邻,放在同一个缓存行,如果其中一个数据被修改,会重新同步到缓存中.
解决方法: 填充(Padding) 两个之间在不同缓存行里(64字节)手动设置或者@Contended -java1.8自带的(加128字节)在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值