[数据库的并发操作可能带来的问题]处理大量数据后下游方法分支不支持并发

处理大量数据后,必须先将这些数据发送到下游方法再进行处理,但下游方法的处理速度不受控制,可能快也可能慢。 如果下游方法的处理速度较慢,则当前方法的处理速度会变慢。 在这种情况下,该怎么办呢?

你也许可以考虑使用线程池,但是你需要创建很多线程。 还必须考虑到下游方法分支不支持并发。 对于CPU密集型任务,多线程的处理速度可能比单线程慢。 因为需要频繁的上下文切换。

image

今天我们来详细分析一下Queue的基础源代码。

抛出异常

返回特定值

暂时屏蔽

输入数据

取数据

取数据

不支持

不支持

这些方法的差异如下。

队列满了之后,将数据放入队列。 add方法抛出异常。 出价方法返回false。 put方法会一直屏蔽。 出价方法阻止指定时间,然后返回false。

如果队列为空,则从队列中检索数据。 remove方法抛出异常,poll方法返回null。 take方法保持阻塞状态,poll方法在指定的时间阻塞并返回null。

工作中使用最多的是offer,Paul屏蔽指定时间的方法。

基于数组实现的阻塞队列是一个有界队列,在创建队列时必须指定其大小。

根据链表实现的阻塞队列默认为无边界队列,创建时可以指定容量大小

在没有缓冲区的块队列中,生产的数据需要立即被消耗

实现高优先级的阻塞队列,基于数据表示为无界队列.

image

无论是放入数据还是取数据,都从开头开始,向队伍的最后移动。

源代码有一个有趣的设计。 添加元素时,如果到了团队的末尾,接下来从团队的开头开始添加。 等于建立了循环队列。

如下所示。

image


发表评论

Copyright 2002-2022 by 上海市精美塑料包装有限公司(琼ICP备2022001899号-3).All Rights Reserved.