【发布时间】:2017-10-13 05:52:54
【问题描述】:
我知道 ConcurrentLinkedDeque 可以在多线程应用程序中使用它们两者之间的基本区别。
谁能给我一个实际的例子,如果错误使用它会如何影响应用程序的性能,在哪种情况下我应该使用 ConcurrentLinkedDeque 以及何时使用 ArrayDeque。
【问题讨论】:
标签: java deque arraydeque
我知道 ConcurrentLinkedDeque 可以在多线程应用程序中使用它们两者之间的基本区别。
谁能给我一个实际的例子,如果错误使用它会如何影响应用程序的性能,在哪种情况下我应该使用 ConcurrentLinkedDeque 以及何时使用 ArrayDeque。
【问题讨论】:
标签: java deque arraydeque
如果您需要从多个线程同步访问队列,请使用ConcurrentLinkedDeque,否则使用ArrayDeque。
期间。
使用错误的后果是,如果您尝试在多线程设置中访问ArrayDeque,您将损坏您的队列。
期间。
这是您唯一的性能考虑因素。其他都没有实际意义。
除非……
您通过分析器运行了您的应用程序,并发现它的大部分时间都花在了ConcurrentLinkedDeque.size() 中。然后切换到 ArrayDeque 包裹在 synchronized 块中。
讲座结束;)
【讨论】:
ArrayDeque 不提供确保多个线程不会同时尝试访问它所必需的线程同步。想象一下,例如,线程“A”尝试执行addFirst(),而线程“B”同时尝试执行removeFirst()。它们会相互冲突,并可能使ArrayQueue 处于混乱状态。