首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多线程之间安全地共享ArrayDeque?

如何在多线程之间安全地共享ArrayDeque?
EN

Stack Overflow用户
提问于 2016-06-30 13:06:00
回答 2查看 2.7K关注 0票数 4

最近,我开始阅读“Java7并发Cookbook”,在创建和运行守护进程线程的一节中,我找到了主线程创建的代码和ArrayDeque的一个实例,并与三个生产者和一个使用者共享了它的引用。生产者调用deque.addFirst(event),消费者调用deque.getLast()

但JavaDoc of ArrayDeque明确表示:

数组标记不是线程安全的;在没有外部同步的情况下,它们不支持多线程的并发访问。

所以我想知道这是个错误还是我只是不明白什么?

EN

回答 2

Stack Overflow用户

发布于 2019-08-26 16:05:41

阵列设备并不是线程安全的,这意味着您必须提供外部同步。

但是,就像霍格说的,它的工作原理是

您使用的是addFirst(e)是一种插入模型方法,会导致底层数据结构中的更改

您使用的是getLast(),它是一种检查模型方法,不会导致底层数据结构中的更改。

这就是它工作的原因,如果您使用的是removeLast()而不是getLast(),那么您肯定会得到ConcurrentModification 异常

希望这能澄清一切,干杯

票数 2
EN

Stack Overflow用户

发布于 2019-08-26 15:27:17

我们清楚地提到,如果您不打算提供任何外部同步,那么ArrayDeque就不会像Vector那样提供同步特性(为线程安全-并发提供内部特性)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38124043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档