【问题标题】:ConcurrentLinkedDeque vs ArrayDequeConcurrentLinkedDeque vs ArrayDeque
【发布时间】:2017-10-13 05:52:54
【问题描述】:

我知道 ConcurrentLinkedDeque 可以在多线程应用程序中使用它们两者之间的基本区别。

谁能给我一个实际的例子,如果错误使用它会如何影响应用程序的性能,在哪种情况下我应该使用 ConcurrentLinkedDeque 以及何时使用 ArrayDeque。

【问题讨论】:

    标签: java deque arraydeque


    【解决方案1】:

    如果您需要从多个线程同步访问队列,请使用ConcurrentLinkedDeque,否则使用ArrayDeque

    期间。

    使用错误的后果是,如果您尝试在多线程设置中访问ArrayDeque,您将损坏您的队列。

    期间。

    这是您唯一的性能考虑因素。其他都没有实际意义。

    除非……

    您通过分析器运行了您的应用程序,并发现它的大部分时间都花在了ConcurrentLinkedDeque.size() 中。然后切换到 ArrayDeque 包裹在 synchronized 块中。

    讲座结束;)

    【讨论】:

    • 如果我在多线程应用程序中使用它会如何破坏我的双端队列 ArrayDeque?
    • ArrayDeque 不提供确保多个线程不会同时尝试访问它所必需的线程同步。想象一下,例如,线程“A”尝试执行addFirst(),而线程“B”同时尝试执行removeFirst()。它们会相互冲突,并可能使ArrayQueue 处于混乱状态。
    • ConcurrentLinkedDeque 不提供同步。如果您 Ctrl-F 类及其超类,您将不会发现任何使用锁或同步语句。它使用来自 sun.misc.Unsafe 的 compreAndSwap。
    猜你喜欢
    • 1970-01-01
    • 2015-06-17
    • 2021-08-06
    • 2021-02-27
    • 1970-01-01
    • 2019-11-08
    • 2013-07-14
    • 2021-02-24
    • 2013-05-04
    相关资源
    最近更新 更多