并发操作
并发操作之——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的概念以及常见的阻塞队列。