gpt4 book ai didi

java - 在 Java ArrayList(或类似的东西)上并发读取和设置

转载 作者:行者123 更新时间:2023-11-30 05:05:37 25 4
gpt4 key购买 nike

在Java中,如果多个线程读取java.util.ArrayList中的值,并且其中一个线程可以通过调用ArrayList.set(index, newVal)来设置一个条目那行得通吗? (我将解释“工作”的含义)

假设数组列表的大小没有改变(它是预定义的,例如用 null 填充)。还假设只有一个指定线程会调用 set 方法。

我认为只要满足以下条件就可以正常工作

  1. 它不会抛出任何类型的异常,
  2. 更新的条目最终将被读取线程看到。

最佳答案

如果您只是设置值而不更改长度,那么这可能适合您使用。来自 ArrayList javadoc

Note that this implementation is not synchronized. If multiple threads access an ArrayList instance concurrently, and at least one of the threads modifies the list structurally, it must be synchronized externally. (A structural modification is any operation that adds or deletes one or more elements, or explicitly resizes the backing array; merely setting the value of an element is not a structural modification.)

如果您正在进行结构修改,或者多个线程正在写入 ArrayList,那么您可能需要使用 Collections.synchronizedList 来获取线程安全列表。

关于java - 在 Java ArrayList(或类似的东西)上并发读取和设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208599/

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