У меня есть ArrayList, который я хочу использовать для хранения объектов RaceCar, которые расширяют класс Thread, как только они закончатся. Класс, называемый Race, обрабатывает этот ArrayList, используя метод обратного вызова, который вызывает объект RaceCar, когда он завершен. Метод обратного вызова addFinisher (финишер RaceCar) добавляет объект RaceCar в ArrayList. Предполагается, что он должен выполнить порядок выполнения Threads.
Я знаю, что 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);
}
Что мне нужно знать, я использую правильный подход, а если нет, то что я должен использовать, чтобы сделать мой код потокобезопасным? Спасибо за помощь!