gpt4 book ai didi

java - 使用并发运行的线程将单词添加到数组列表

转载 作者:行者123 更新时间:2023-12-02 04:12:44 25 4
gpt4 key购买 nike

我创建了一个 ArrayList 类型的静态字段

public static ArrayList<String> infiList;

我需要在main方法下添加三个并发运行的线程,这三个线程应按照以下规则重复向infiList添加单词:

1) 在每次循环中,线程应该向 infiList 添加一个单词。

2) 如果 infiList 中的最后一个单词当前是“This”,则线程应将单词“is”追加到 infiList 中。

3) 如果 infiList 中的最后一个单词当前是“is”,则线程应将单词“infinite”追加到 infiList 中。

4) 如果 infiList 中的最后一个单词当前为“infinite”,或者 infiList 仍为空,则线程应将单词“This”追加到 infiList 中。

5) 在任何时候,infiList 都应该只在列表的开头或紧接在“infinite”出现之后包含“This”,“is”应该只在列表中直接出现在“This”之后,并且“infinite”只能直接出现在“is”之后。 infiList 中不允许有其他单词。

例如:一段时间后,infiList 应包含以下字符串列表:“This”、“is”、“infinite”、“This”、“is”、“无限”,“这个”,"is",“无限”,“这个”,"is",“无限”,“这个”,"is",...

我如何开始执行此操作,如何创建一个并发运行的线程来将单词添加到数组列表?

提前致谢

最佳答案

作为Javadoc for ArrayList说:

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 本身上进行同步:

synchronized (infiList) {
// ... Whatever logic to make structural modifications to the list.
// e.g. infiList.add(something);
}

请注意,您不应使用 Collections.synchronizedList(...) 来包装 infiList,因为您描述的逻辑类似于“如果某个值在列表中,则添点什么”。您需要对此处的获取和添加列表具有独占访问权限,否则条件可能在获取后不再为真。

关于java - 使用并发运行的线程将单词添加到数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33631968/

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