当前位置: 首页 > news >正文

网站优化标题百度网址大全官方下载

网站优化标题,百度网址大全官方下载,品牌网站建设维护,香港wordpress不限域名顾名思义,就是一种在对队列进行出队或者入队操作的时候会阻塞的队列。下面使用JDK17中的LinkedBlockingQuece进行简单的介绍。 LinkedBlockingQueue基本结构 LinkedBlockingQueue的主要结构以及构成的数据结构如下图所示。具体来说包括 存储元素的链表&#xff0…

顾名思义,就是一种在对队列进行出队或者入队操作的时候会阻塞的队列。下面使用JDK17中的LinkedBlockingQuece进行简单的介绍。

LinkedBlockingQueue基本结构

LinkedBlockingQueue的主要结构以及构成的数据结构如下图所示。具体来说包括

  • 存储元素的链表,first指针指向队头,last指针指向队尾。
  • 控制向队列中入队节点的可重入锁 putLock,以及队列满时让生产者线程排队等待的 notFull 条件等待队列。
  • 控制向队列中出队节点的可重入锁 takeLock,以及队列为空的时候让消费者排队的 notEmpty 条件等待队列。
  • 尝试入队操作的生产者线程。
  • 尝试出队操作的消费者线程。

接下来介绍LinkedBlockingQueue的几个基本操作。

入队操作:

  • put(E) 将元素入队,如果队列满了那么将操作线程放入等待队列notFull, 直到入队成功。
  • offer(E) 将元素入队,如果队列满了那么直接返回false,入队失败。

出队操作:

  • take() 将元素出队,如果队列为空那么将操作线程放入等待队列notEmpty,直到出队成功。
  • poll() 将元素出队,如果队列为空返回false,出队失败。

put,offer以及 take,poll的操作之间的不同都是在队列不满足条件的时候是将其放入条件等待队列等待队列满足条件的时候唤醒还是直接返回false表示操作失败。

出队入队的基本操作

put(E e)

具体流程如下图所示,这是一个线程安全的队列,因为每次队队列的入队出队操作必须获取锁之后才会继续运行。生产者线程在获取了putLock后判断队列是否还会达到容量,如果还有容量那么直接放入,如果队列已满那么放入notFull等待队列中。因为生产者在队尾操作,消费者在队头操作,不会相互影响,在新增节点的过程中可能会有节点出队。所以在放入元素后判断队列是否还有容量,如果有就将notFull等待队列中的线程唤醒。在释放锁后判断在插入前队列是否为空,如果为空,说明可能有消费者线程在条件等待队列中等待获取元素,那么就去唤醒notEmpty中的线程,这些线程由于之前队列为空被放入条件等待队列等待。

public void put(E e) throws InterruptedException {if (e == null) throw new NullPointerException();final int c;final Node<E> node = new Node<E>(e);final ReentrantLock putLock = this.putLock;final AtomicInteger count = this.count;putLock.lockInterruptibly();try {/** Note that count is used in wait guard even though it is* not protected by lock. This works because count can* only decrease at this point (all other puts are shut* out by lock), and we (or some other waiting put) are* signalled if it ever changes from capacity. Similarly* for all other uses of count in other wait guards.*/while (count.get() == capacity) {notFull.await();}enqueue(node);c = count.getAndIncrement();if (c + 1 < capacity)notFull.signal();} finally {putLock.unlock();}if (c == 0)signalNotEmpty();
}

take()

take操作与put操作类似,只不过操作的锁和等待队列恰好相反。

public E take() throws InterruptedException {final E x;final int c;final AtomicInteger count = this.count;final ReentrantLock takeLock = this.takeLock;takeLock.lockInterruptibly();try {while (count.get() == 0) {notEmpty.await();}x = dequeue();c = count.getAndDecrement();if (c > 1)notEmpty.signal();} finally {takeLock.unlock();}if (c == capacity)signalNotFull();return x;}

另外需要注意的是 使用的两个可重入锁为 非公平锁,也就是说队列中的顺序并不严格满足先进先出的特性。源码的解释也有点冲突。

http://www.dinnco.com/news/66004.html

相关文章:

  • 邢台提供网站设计公司哪家专业外链网盘源码
  • 找网站建设企业2022最新热点事件及点评
  • 漫画做视频在线观看网站深圳网络推广专员
  • 做我姓什么的网站百度网盘app官网下载
  • 网站建设费税率是多少济南搜索引擎优化网站
  • 网站关键字优化合同qq关键词排名优化
  • 常州集团网站建设各种推广平台
  • 北京南站停车场收费标准如何开一个自己的网站
  • 网络公司构建网站百度账号怎么注销
  • 义乌 外贸网站 开发seo是什么单位
  • 做网站的云服务器选什么百度100%秒收录
  • 南京网站设计公司兴田德润放心网站制作开发
  • 四川网站备案seo研究中心骗局
  • wordpress主题:精选zruckmetro主题seo怎样优化网站
  • 广东手机网站建设报价表品牌网站建设
  • 网站开发的技术可行性百度seo怎么把关键词优化上去
  • 成都网站建设有名的网站点击量 哪里查询
  • 广州市车管所网站建设推广标题怎么写
  • 网站开发企业需要什么资质市场调研报告范文
  • 中国建设信息港网站app推广项目
  • 厚街响应式网站设计广州百度首页优化
  • 廊坊疫情最新消息情况梁水才seo优化专家
  • 做物流的都有哪些网站网络营销seo是什么意思
  • 安徽华建建设工程公司网站新品牌推广方案
  • 广东省建设执业资格注册中心官方网站网络服务商电话
  • 搜索网站logo怎么做百度seo是什么意思呢
  • 怎么做网站地图导航网络营销方案模板
  • 自建木屋教程郑州搜索引擎优化
  • aws网站建设游戏推广员到底犯不犯法
  • 网站做视频播放占用cpu吗怎么让某个关键词排名上去