如何使 ArrayList 线程安全?Java中问题的另一种方法?
2022-08-31 09:28:32
我有一个 ArrayList,我想用它来保存 RaceCar 对象,这些对象在执行完成后立即扩展 Thread 类。一个名为 Race 的类使用回调方法处理此 ArrayList,RaceCar 对象在执行完成后调用该方法。回调方法 addFinisher(RaceCar finisher) 将 RaceCar 对象添加到 ArrayList 中。这应该给出线程完成执行的顺序。
我知道ArrayList不是同步的,因此不是线程安全的。我尝试使用 Collections.synchronizedCollection(c Collection) 方法,方法是传入新的 ArrayList 并将返回的集合分配给 ArrayList。但是,这给了我一个编译器错误:
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);
}
我需要知道的是,我是否使用了正确的方法,如果没有,我应该使用什么来使我的代码线程安全?感谢您的帮助!