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