Rendre ArrayList thread-safe : une approche alternative en Java
Dans les applications multithread, garantir la sécurité des threads est crucial pour éviter les conditions de concurrence et corruption des données. Une tâche courante consiste à gérer les structures de données partagées, telles que les ArrayLists, de manière synchronisée.
Considérons un scénario dans lequel une ArrayList stocke des objets RaceCar qui étendent la classe Thread. Une classe Race gère cette ArrayList via une méthode de rappel qui y ajoute des objets RaceCar finis. L'objectif est de conserver l'ordre dans lequel ces threads terminent leur exécution. Cependant, l'utilisation d'une ArrayList sans synchronisation peut entraîner des problèmes de sécurité des threads.
Pour résoudre ce problème, on peut tenter d'utiliser Collections.synchronizedCollection(c Collection) pour créer une version synchronisée de l'ArrayList. Cependant, cette approche entraîne une erreur du compilateur en raison d'une incompatibilité de type.
Une solution plus appropriée consiste à utiliser Collections.synchronizedList(). Cette méthode prend une ArrayList existante comme argument et renvoie une version synchronisée de cette liste. Voici un exemple :
<code class="java">ArrayList<RaceCar> finishingOrder = Collections.synchronizedList(new ArrayList<>(numberOfRaceCars));</code>
Ce code crée une ArrayList thread-safe, finishOrder, qui peut être utilisée pour stocker et manipuler des objets RaceCar de manière synchronisée. En tirant parti de Collections.synchronizedList(), vous pouvez garantir que les opérations sur ArrayList sont effectuées de manière atomique, éliminant ainsi la possibilité d'interférence de thread et de corruption de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!