阻塞队列设计与选型
2023-08-22 18:17:13 2 举报
阻塞队列设计与选型
作者其他创作
大纲/内容
ArrayBlockingQueue应用场景:生产速度和消费速度基本匹配的情况下,使用ArrayBlockingQueue是个不错选择如果生产速度远远大于消费速度,则会导致队列填满,大量生产线程被阻塞
SynchronousQueue应用场景:非常适合传递性场景做交换工作,生产者的线程和消费者的线程同步传递某些信息、事件或者任务典型案例:线程池Executors.newCachedThreadPool(),提交一个任务创建一个新的线程,如果有空闲线程则会重复使用,线程空闲了60秒后会被回收
返回并删除队首元素,队列为空则抛出异常
获取队首元素,但不移除,队列为空则返回null
可以设置阻塞时间,如果队列已满,则进行阻塞。超过阻塞时间,则返回false
返回并删除队首元素,队列为空则返回null
返回队首元素,但不移除,队列为空则抛出异常
队列没满的时候是正常的插入,如果队列已满,则阻塞,直至队列空出位置
队列里有数据会正常取出数据并删除;但是如果队列里无数据,则阻塞,直到队列里有数据
阻塞队列接口规范
可以设置阻塞时间,如果没有数据,则阻塞,超过阻塞时间,则返回null
阻塞功能使得生产者和消费者两端的能力得以平衡。当有任何一端速度过快时,阻塞队列便会把过快的速度给降下来。实现阻塞最重要的两个方法是 take 方法和 put 方法。
BlockingQueue在Queue基础上增加了阻塞功能
LinkedBlockingQueue应用场景:高并发的情况下生产者和消费者可以并行地操作队列中的数据,以此来提高整个队列的并发性能
顶级接口规范
因为阻塞队列是线程安全的,所以生产者和消费者都可以是多线程的,不会发生线程安全问题。生产者/消费者直接使用线程安全的队列就可以,而不需要自己去考虑更多的线程安全问题。降低日常开发的难度和工作量。
0 条评论
下一页