当前位置: 首页 > 知识库问答 >
问题:

“LinkedBlockingQueue在并发应用程序中不可预测的性能”是什么意思?

裴宏壮
2023-03-14

没有清楚地解释他们这句话的意思。谁能把灯点亮吗?这是否意味着LinkedBlockingQueue不是线程安全的?你们中有谁在使用LinkedBlockingQueue时遇到任何问题。

由于生产者的数量要多得多,所以我总是会遇到一种情况,即队列被大量要添加的条目淹没。如果我改用ArrayBlockingQueue,它在构造函数中将队列的大小作为参数,我总是会遇到与容量完全相关的异常。为了避免这种情况,我不确定如何确定应该用什么大小实例化我的ArrayBlockingQueue。您是否必须使用ArrayBlockingQueue解决类似的问题?

共有1个答案

羊舌成周
2023-03-14

这是否意味着LinkedBlockingQueue不是线程安全的?

这当然不意味着。“较难预测的性能”这句话指的只是性能,而不是违反线程安全或Java集合契约。

我怀疑这更多的是因为它是一个链接列表,所以对集合的迭代和其他操作会更慢,所以类持有锁的时间会更长。它还必须处理更多的内存结构,因为每个元素都有一个链表节点,而不是数组中的一个条目。这意味着它在同步时必须在处理器之间刷新更多脏内存页。同样,这会影响性能。

 类似资料:
  • 问题内容: 是什么使线程的执行顺序不可预测?调度程序是在某个时候使用随机数还是检查系统资源,还是查看哪个线程已经等待了足够长的时间或…? 问题答案: 调度程序通常是OS的调度程序。它受许多因素的影响,包括计算机上的其他进程正在执行的操作,硬件在执行的操作(中断)等。根据操作系统的不同,我想有时可能涉及随机数,但我通常怀疑不是。多个可变时间间隔可能会重叠,这只是一种不可预测的方式。

  • 我有一个Spring启动应用程序。我正在编写Junit测试。我试图从application.properties(在src/main/resources/application.properties中定义)和AppConfig(src/main/java/hello/AppConfig.java)中配置的状态bean注入值。我看到bean是autowired(通过调试器,它不是null),但没有设

  • 这可能是有史以来问过的最愚蠢的问题,但我认为对于一个Java新手来说,这相当令人困惑。 有人能澄清什么是不可变的吗 一个很好的例子(在Java中)将非常感谢。

  • 当使用代码进行扩展时,我得到以下错误,我不确定他们是要求使用不同的操作符还是修改基于互联网搜索的表达式中的值。 错误:%不可用:请改用trunchingRemaider 扩展代码: 设置分钟和秒变量时出错。

  • 问题内容: 中的类对什么意味着什么?或者总的来说… 问题答案: 序列化将一个对象从内存持久存储到一系列位中,例如保存到磁盘上。反序列化是相反的-从磁盘读取数据以水合/创建对象。 就您的问题而言,它是一个接口,如果在一个类中实现,则该类可以由不同的序列化程序自动进行序列化和反序列化。

  • 如果我有一个模型序列化程序,其中数据库模型中不需要first_name和last_name(blank=True,null=True,default=None),并且我选择提交可能包含或可能不包含“first_name”或“last_name”字段的json数据,那么无论这些字段是否通过json请求提交,这些字段不应该存在于已验证的_数据[]中,因为它们列在序列化程序字段中,并且其默认值设置为无?