J'ai une liste de tableaux que je veux utiliser pour tenir Course des objets qui étendent la classe Thread dès qu'ils ont fini de s'exécuter. Une classe, une Race, qui gère cette liste de tableaux à l'aide d'une méthode de rappel que la voiture de Course de l'objet des appels quand il est fini de l'exécution. La méthode de rappel, addFinisher(voiture de Course de l'unité de finition), ajoute la voiture de Course de l'objet à la liste de tableaux. Ce qui est censé donner l'ordre dans lequel les Threads terminer l'exécution.
Je sais que ArrayList n'est pas synchronisé et donc n'est pas thread-safe. J'ai essayé d'utiliser les Collections.synchronizedCollection(c Collection) méthode en passant par new ArrayList et de l'affectation de la Collection renvoyée à une liste de tableaux. Cependant, cela me donne une erreur de compilation:
Race.java:41: incompatible types
found : java.util.Collection
required: java.util.ArrayList
finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars));
Voici le code correspondant:
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);
}
Ce que j'ai besoin de savoir, c'est que je suis en utilisant une approche correcte et si non, que dois-je utiliser pour faire mon code thread-safe? Merci pour l'aide!