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

ArrayDeque的堆栈和同步装饰器之间的区别

蓟浩旷
2023-03-14

我想有后进先出的效果,我想它是同步的。有人知道我应该使用这两个实现中的哪一个吗?谷歌搜索了一段时间,还是没有好答案。

底线:区别是什么,为什么使用一个而不是另一个,为什么说它偏向于ArrayDeQueue?

共有1个答案

汝吕恭
2023-03-14

来自问题:

为什么说它偏爱ArrayDeQueue?

并没有说它偏爱arraydeque(一个类)。

deque接口及其实现提供了一组更完整、更一致的后进先出堆栈操作,应该优先使用此类。

Java运行时库提供了deque的以下实现选项:

  • ArrayDeque-通常是单线程使用的最佳选择
  • ConcurrentLinkedDeque-通常是多线程使用的最佳选择
  • LinkedBlockingDeque-如果需要具有大小限制堆栈
  • LinkedList-如果堆栈可能变大,而您希望在堆栈缩小时回收空间

LinkedBlockingDeque使用锁,这与使用Synthronized类似,但其他都不使用Synchronized。事实证明,ConcurrentLinkedDeque实现线程安全的方式比使用Synchronized的实现性能更好。arraydequestack快,因为它没有使用synchronized,所以对于非线程安全的代码更好。

另请参见:为什么我应该在Stack上使用Deque?
另请参见:为什么Java Vector(和Stack)类被认为是过时的或不推荐使用的?

 类似资料:
  • 问题内容: 我想这就是它们的称呼,但我会举一些例子以防万一。 装饰类: 装饰器功能: 使用一个或另一个只是口味的问题吗?有实际区别吗? 问题答案: 如果您可以编写函数来实现装饰器,则应首选它。但是并非所有装饰器都可以轻松地编写为一个函数-例如,当您要存储一些内部状态时。 我见过人们(包括我自己)经过荒唐的努力,只用函数编写装饰器。我仍然不知道为什么,一个班级的开销通常可以忽略不计。

  • 问题内容: 在Java多线程中,术语和之间在语义上有区别吗? 问题答案: 每个线程都有自己的调用堆栈,“调用堆栈”和“线程堆栈”是同一件事。将其称为“线程堆栈”只是强调了调用堆栈特定于线程。 Bill Venners将此称为Java堆栈: 启动新线程时,Java虚拟机将为该线程创建一个新的Java堆栈。如前所述,Java堆栈将线程的状态存储在离散的帧中。Java虚拟机仅直接在Java堆栈上执行两项

  • 本文向大家介绍Java中的堆栈和堆内存之间的区别,包括了Java中的堆栈和堆内存之间的区别的使用技巧和注意事项,需要的朋友参考一下 JVM将内存空间分为两部分,一个是堆栈,另一个是堆空间。堆栈空间主要用于存储方法执行的顺序和局部变量。 堆栈始终按照LIFO顺序存储块,而堆内存使用动态分配来分配和取消分配内存块。  分配给堆的内存将一直存在,直到发生以下事件之一: 程序终止  无记忆  相反,分配给

  • 本文向大家介绍同步和异步计数器之间的区别,包括了同步和异步计数器之间的区别的使用技巧和注意事项,需要的朋友参考一下 众所周知,在数字电子学中,计数器是由一系列触发器组成的顺序逻辑电路,用于按负或正边沿跳变来计数输入出现的次数。现在,基于触发器的触发方式,我们可以区分同步计数器和异步计数器。 以下是同步计数器和异步计数器之间的重要区别。 序号 键 同步计数器 异步计数器 1 触发 顾名思义,在使用同

  • 问题内容: 装饰器模式和委托模式(如果有)之间有什么区别?我不仅想了解实现细节,还不想了解用例差异和如何使用它们的主观观点。 装饰图案 委托模式 编辑: 您能否指向使用这些模式的OS源代码(在OS项目中)(尤其是委托,因为在Java IO类中使用了装饰)。我正在寻找一些实际用法,而不仅仅是虚拟示例。也许这些模式是相同的,只是标题不同。随时写这个意见。 问题答案: 装饰器使用委派,但使用一种非常特定

  • 本文向大家介绍同步和异步传输之间的区别,包括了同步和异步传输之间的区别的使用技巧和注意事项,需要的朋友参考一下 在数字电子设备中,同步传输和异步传输都是串行数据传输的一种类型,其中,基于用于同步的时钟脉冲,数据在发送方和接收方之间进行传输。 以下是同步传输和异步传输之间的重要区别- 序号 键 同步传输 异步传输 1 定义 同步传输是一种传输类型,其中在发送器和接收器之间共享一个公共时钟脉冲以允许同