并发操作之——BlockingQueue

并发操作

并发操作之——BlockingQueue.


并发操作之——BlockingQueue


一、编程里面解决生产消费者模型的几种方式

核心: 要保证生产者不会在缓冲区满时放入数据,消费者也不会在缓冲区空时消耗数据

常用的同步方法是采用信号或加锁机制

1、wait() / notify()方法

wait() / notify()方法

2、await() / signal()方法

用ReentrantLock和Condition实现等待/通知模型

3、Semaphore信号量

​Semaphore信号量

4、BlockingQueue阻塞队列

ArrayBlockingQueue
LinkedBlockingQueue
put方法用来向队尾存入元素,如果队列满,则阻塞
take方法用来从队首取元素,如果队列为空,则阻塞

二、BlockingQueue和常见的阻塞队列

BlockingQueue:

1、当阻塞队列进行插入数据时,如果队列已满,线程将会阻塞等待直到队列非满
2、从阻塞队列读数据时,如果队列为空,线程将会阻塞等待直到队列里面是非空的时候

1、ArrayBlockingQueue

基于数组实现的一个阻塞队列,需要指定容量大小,FIFO先进先出顺序

2、LinkedBlockingQueue

基于链表实现的一个阻塞队列,如果不指定容量大小,默认Integer.MAX_VALUE, FIFO先进先出顺序。

3、PriorityBlockingQueue:

一个支持优先级的*阻塞队列,默认情况下元素采用自然顺序升序排序,也可以自定义排序实现 java.lang.Comparable接口

4、DelayQueue

延迟队列,在指定时间才能获取队列元素的功能,队列头元素是最接近过期的元素,里面的对象必须实现 java.util.concurrent.Delayed 接口并实现CompareTo和getDelay方法


总结

生产消费者模型的几种方式和阻塞队列BlockingQueue的概念以及常见的阻塞队列。

上一篇:BlockingQueue 学习


下一篇:Qt:tableWidget分页功能,并且插入控件