Tengo una ArrayList que quiero usar para contener objetos RaceCar que extienden la clase Thread tan pronto como terminan de ejecutarse. Una clase, llamada Race, maneja esta ArrayList usando un método de devolución de llamada que el objeto RaceCar llama cuando termina de ejecutarse. El método de devolución de llamada, addFinisher (RaceCar finisher), agrega el objeto RaceCar a ArrayList. Se supone que esto da el orden en que los subprocesos terminan de ejecutarse.
Sé que ArrayList no está sincronizado y, por lo tanto, no es seguro para subprocesos. Intenté usar el método Collections.synchronizedCollection (c Collection) pasando una nueva ArrayList y asignando la colección devuelta a una ArrayList. Sin embargo, esto me da un error de compilación:
Race.java:41: incompatible types
found : java.util.Collection
required: java.util.ArrayList
finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars));
Aquí está el código relevante:
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);
}
Lo que necesito saber es, ¿estoy usando un enfoque correcto y, de no ser así, qué debo usar para que mi código sea seguro para subprocesos? ¡Gracias por la ayuda!
List
interfaz no es lo suficientemente completa para ser muy útil en múltiples hilos.)