我有一个 ArrayList,我想用它来保存 RaceCar 对象,这些对象在完成执行后立即扩展 Thread 类。一个名为 Race 的类使用 RaceCar 对象在完成执行时调用的回调方法处理此 ArrayList。回调方法 addFinisher (RaceCar finisher)将 RaceCar 对象添加到 ArrayList。这应该给出 Threads 完成执行的顺序。
我知道 ArrayList 不是同步的,因此不是线程安全的。我尝试通过传入一个新的 ArrayList 并将返回的 Collection 分配给 ArrayList 来使用 Collections.synizedCollection (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);
}
我需要知道的是,我是否使用了正确的方法,如果没有,我应该使用什么来使我的代码线程安全?谢谢你的帮助!