gpt4 book ai didi

java - 如何在多个线程之间安全地共享 ArrayDeque?

转载 作者:行者123 更新时间:2023-11-29 09:28:20 26 4
gpt4 key购买 nike

最近我开始阅读“Java 7 Concurrency Cookbook”,在Creating and running a daemon thread 部分找到了创建主线程的代码和一个 ArrayDeque 实例,以及与三个生产者和一个消费者共享其引用。生产者调用 deque.addFirst(event),消费者调用 deque.getLast()

但是 ArrayDeque 的 JavaDoc 明确指出:

Array deques are not thread-safe; in the absence of external synchronization, they do not support concurrent access by multiple threads.

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

最佳答案

数组双端队列不是线程安全的,这意味着您必须提供外部同步。

但是它起作用的原因是,就像霍尔格说的 Deque methods

您正在使用 addFirst(e) 是一种插入模型方法,它会导致底层数据结构发生变化

您正在使用 getLast(),这是一种检查模型的方法,不会导致底层数据结构发生变化。

这就是它起作用的原因,如果您使用的是 removeLast() 而不是 getLast(),您应该得到 ConcurrentModification < strong>Exception 当然。

希望一切都解决了,干杯

关于java - 如何在多个线程之间安全地共享 ArrayDeque?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38124043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com