文档章节

Queue.ArrayBlockQueue

脑丨残
 脑丨残
发布于 2017/05/22 21:02
字数 197
阅读 14
收藏 0
点赞 0
评论 0

#ArrayBlockQueue

  • 见名知义,数组结构,阻塞队列,线程安全
  • 内部结构
    //存储数组
    final Object[] items;
    //取索引
    int takeIndex;
    //插索引
    int putIndex;
    //元素容量
    int count;
    //同步锁
    final ReentrantLock lock;
    //取阻塞条件
    private final Condition notEmpty;
    //插入阻塞条件
    private final Condition notFull;
  • put 方法,插入,满则等待
//lock 优先考虑获取锁,待获取锁成功后,才响应中断。
//lockInterruptibly 优先考虑响应中断,而不是响应锁的普通获取或重入获取
public void put(E e) throws InterruptedException {
        checkNotNull(e);
        final ReentrantLock lock = this.lock;
        //允许其他线程来来中断当前线程,抛出异常
        lock.lockInterruptibly();
        try {
            while (count == items.length)
                notFull.await();
            enqueue(e);
        } finally {
            lock.unlock();
        }
    }
public E take() throws InterruptedException {
        final ReentrantLock lock = this.lock;
        lock.lockInterruptibly();
        try {
            while (count == 0)
                notEmpty.await();
            return dequeue();
        } finally {
            lock.unlock();
        }
    }
  • TODO 遍历过程,同步,操作指针

© 著作权归作者所有

共有 人打赏支持
脑丨残
粉丝 8
博文 60
码字总数 23267
作品 0
西安

暂无文章

LSM树(Log-Structured Merge Tree)存储引擎浅析

其实每一种数据库,它都是一种抽象的数据结构的具体实现。 随着rocksDB(facebook的),levelDB(google的),以及我们熟知的hbase,他们都是使用的LSM树结构的数据库。 它的核心思路其实非常...

算法之名
8分钟前
0
0
ARTS说明

湾曲日报,作者每天阅读5篇优质英文文章,从2014/08/06开始,到今天也1216期了. 阮一峰的每周分享,从2018/04/20开始,每周5分享一周作者认为值得分享的东西,现在最新是14期. 关于ARTS Algorithm ...

yysue
10分钟前
0
0
sql优化原则

批量查询/更新/获得表结构 1.sp_help table_name;-sqlserver==desc table_name-mysql 如: sp_help Student; sql优化: 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引...

xd03122049
18分钟前
0
0
python爬虫日志(6)小小实践

经过3天的学习,现在对简单的网页基本可以爬取想爬取的信息了,但还无法应对网站一些复杂的反爬虫措施。 今天利用目前为止所学的知识,试着爬取了煎蛋网几页图片并下载到本地。 #首先还是先导...

茫羽行
24分钟前
0
0
js中用oop思想封装轮播

用户可以自己设置:1、速度speed:fast,normal,slow 2、是否自动轮播:true,false 3、选择器(当然可以根据需求,增加,目前先封的这三个)仅供参考 觉得oop面向对象的思想比较有意思,前端...

琴妹
24分钟前
0
0
使用fastjson将json格式的数据转化为对象

1. 导入fastjson的jar包 <!-- 9.fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> 2. 常用几种类型的......

Lucky_Me
26分钟前
0
0
JDK11的ZGC小试牛刀

序 本文主要试一下JDK11的ZGC ZGC ZGC全称是Z Garbage Collector,是一款可伸缩(scalable)的低延迟(low latency garbage)、并发(concurrent)垃圾回收器,旨在实现以下几个目标: 停顿时间不超...

go4it
30分钟前
0
0
电信ss/ssr速度慢 电信国际出口速度慢 被QoS限速

很多人跟我反应,同一条线路,电信用户的国际出口速度很慢,而移动/联通用户却还不错,可能移动/联通可以流畅看1080P,而电信卡的连国外网页都打不开。明明电信的国际出口宽带是三家中最高的...

flyzy2005
35分钟前
0
0
java中equals,hashcode和==的区别

1、== java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型 byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。 2.引用类型...

小海bug
57分钟前
0
0
Win10专业版安装GIT后使用Git Bash闪退解决办法

百度后把过程和最终解决办法记录下来: 百度首先出来的解决办法如下: 来自:https://segmentfault.com/q/1010000012722511?sort=created 重启电脑 重新安装 安装到C盘 尝试网上的教程 \Git...

特拉仔
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部