gpt4 book ai didi

java - 如何使我的 ArrayList 线程安全? Java中解决问题的另一种方法?

转载 作者:IT老高 更新时间:2023-10-28 11:43:25 26 4
gpt4 key购买 nike

我有一个 ArrayList,我想用它来保存 RaceCar 对象,这些对象在执行完 Thread 类后立即扩展。一个名为 Race 的类使用 RaceCar 对象在完成执行时调用的回调方法来处理此 ArrayList。回调方法 addFinisher(RaceCar finisher) 将 RaceCar 对象添加到 ArrayList。这应该给出线程完成执行的顺序。

我知道 ArrayList 不是同步的,因此不是线程安全的。我尝试通过传入一个新的 ArrayList 并将返回的 Collection 分配给一个 ArrayList 来使用 Collections.synchronizedCollection(c Collection) 方法。但是,这给了我一个编译器错误:

Race.java:41: incompatible types
found : java.util.Collection
required: java.util.ArrayList
finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars));

以下是相关代码:

public class Race implements RaceListener {
private Thread[] racers;
private ArrayList finishingOrder;

//Make an ArrayList to hold RaceCar objects to determine winners
finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars));

//Fill array with RaceCar objects
for(int i=0; i<numberOfRaceCars; i++) {
racers[i] = new RaceCar(laps, inputs[i]);

//Add this as a RaceListener to each RaceCar
((RaceCar) racers[i]).addRaceListener(this);
}

//Implement the one method in the RaceListener interface
public void addFinisher(RaceCar finisher) {
finishingOrder.add(finisher);
}

我需要知道的是,我是否使用了正确的方法,如果没有,我应该使用什么来使我的代码线程安全?感谢您的帮助!

最佳答案

使用 Collections.synchronizedList() .

例如:

Collections.synchronizedList(new ArrayList<YourClassNameHere>())

关于java - 如何使我的 ArrayList 线程安全? Java中解决问题的另一种方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2444005/

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