如果订单的成交量非常大,那么使用ArrayBlockingQueue就会有一些问题,固定数组很容易被使用完,此时调用的线程会进入阻塞,那么可能无法及时将消息推送出去,所以使用LinkedBlockingQueue比较合适,但是要注意消费速度不能太低,不然很容易内存被使用完(一般而言不会时时刻刻生产消息, 但是需要预防消息大量堆积) 比较ArrayBlockingQu...
publicclassNumbersProducerimplementsRunnable{privateBlockingQueue<Integer> numbersQueue;privatefinalintpoisonPill;privatefinalintpoisonPillPerProducer;publicNumbersProducer(BlockingQueue<Integer> numbersQueue,intpoisonPill,intpoisonPillPerProducer){this.numbersQueue = numbersQueue;this.poisonPill = poisonPill;this.poisonPi...
通过源码可以看见,ArrayBlockingQueue内部的几乎每一个操作方法都需要先获取同一个ReentrantLock独占锁才能进行,这极大的降低了吞吐量,几乎每个操作都会阻塞其它操作,最主要是插入操作和取出操作相互之间互斥。所以ArrayBlockingQueue不适用于需要高吞吐量的高效率数据生成与消费场景。LinkedBlockingQueue就能弥补其低吞吐量的缺陷。
BlockingQueue有这几种类型:ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、PriorityBlockingQueue、DelayedWorkQueue。 常用方法 放入数据 获取数据 其他方法 ArrayBlockingQueue 简介 ArrayBlockingQueue通过数组实现的FIFO有界阻塞队列,它的大小在实例被初始化的时候就被固定了,不能更改。
实现原理分析: ArrayBlockingQueue实现并不复杂,内部采用了一个Object数组来保存元素,使用了ReentrantLock来保证同步,并通过重入锁的两个condition条件队列来分别控制生产者和消费者的阻塞和唤醒的调度通信,元素的插入和删除均是对数组的元素赋值,取走了就赋值null,其他就是数据本身,不像链表是按需所取。
一、什么是ArrayBlockingQueue?二、使用场景三、常用的方法1、构造方法2、add方法3、offer方法4、put方法5、take方法6、poll方法7、peek方法8、remove方法9、contains方法10、remainingCapacity方法11、drainTo方法 作者:刘宇 CSDN博客地址:https://blog.csdn.net/liuyu973971883 有部分资料参考,如有侵权,请联系删除。如...
BlockingQueue是一个接口,位于java.util.concurrent包中,用于将多个线程之间的数据进行同步操作。BlockingQueue的用法如下:1. 创建一个Blocking...
51CTO博客已为您找到关于blockingqueue java 简单使用的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及blockingqueue java 简单使用问答内容。更多blockingqueue java 简单使用相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。
import java.util.concurrent.PriorityBlockingQueue; import java.util.concurrent.TimeUnit; /** * * PriorityBlockingQueue使用示例 * */ public class PriorityBlockingQueueDemo { public static void main(String[] args) throws Exception { Random random...