zoukankan      html  css  js  c++  java
  • SynchronousQueue

    SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。

    不像ArrayBlockingQueue或LinkedListBlockingQueue,SynchronousQueue内部并没有数据缓存空间,你不能调用peek()方法来看队列中是否有数据元素,因为数据元素只有当你试着取走的时候才可能存在,不取走而只想偷窥一下是不行的,当然遍历这个队列的操作也是不允许的。队列头元素是第一个排队要插入数据的线程,而不是要交换的数据。数据是在配对的生产者和消费者线程之间直接传递的,并不会将数据缓冲数据到队列中。可以这样来理解:生产者和消费者互相等待对方,握手,然后一起离开。

    阻塞算法实现:

      阻塞算法实现通常在内部采用一个锁来保证多个线程中的put()和take()方法是串行执行的。采用锁的开销是比较大的,还会存在一种情况是线程A持有线程B需要的锁,B必须一直等待A释放锁,即使A可能一段时间内因为B的优先级比较高而得不到时间片运行。所以在高性能的应用中我们常常希望规避锁的使用。

  • 相关阅读:
    区块链开发之Corda训练营笔记12:Flow习题答案
    区块链开发之Corda训练营笔记11:Flow代码演示
    gitolite的部署
    python操作redis
    python多进程
    mysql索引
    mysql事务
    mysql外键
    mysql联合查询
    python常用模块之re模块(正则)
  • 原文地址:https://www.cnblogs.com/Mindreader/p/5573851.html
Copyright © 2011-2022 走看看