Rendre ArrayList Thread-Safe en Java : une approche alternative
Dans le contexte de la programmation multithread, il est essentiel de s'assurer que les ressources partagées , tels que les ArrayLists, sont accessibles en toute sécurité pour éviter les incohérences des données et les problèmes de concurrence. Cet article présente une approche alternative pour gérer la sécurité des threads d'une ArrayList en Java, en particulier lorsqu'elle contient des objets personnalisés qui étendent la classe Thread.
Dans votre scénario spécifique, vous disposez d'une ArrayList qui stocke les objets RaceCar, et une méthode de rappel (addFinisher) dans une classe Race qui remplit ArrayList avec des objets RaceCar terminés. Cependant, vous avez rencontré une erreur en essayant d'utiliser la méthode Collections.synchronizedCollection() pour rendre ArrayList thread-safe.
L'erreur que vous avez rencontrée provenait d'une incompatibilité de type entre Collection et ArrayList. Collections.synchronizedCollection() renvoie une collection, alors que vous tentiez de l'attribuer à une variable ArrayList. Au lieu de cela, vous devez utiliser la méthode Collections.synchronizedList(), qui renvoie une ArrayList thread-safe.
<code class="java">finishingOrder = Collections.synchronizedList(new ArrayList(numberOfRaceCars));</code>
En utilisant Collections.synchronizedList(), vous créez une nouvelle ArrayList synchronisée qui encapsule l'ArrayList sous-jacente. Cette liste synchronisée garantit que tous les accès à la liste sont synchronisés, empêchant plusieurs threads de tenter de la modifier simultanément.
Cette approche fournit un moyen pratique et efficace de rendre votre ArrayList thread-safe tout en conservant la fonctionnalité de votre code. Il vous permet d'ajouter et de récupérer en toute sécurité des objets RaceCar dans un environnement multithread sans vous soucier des problèmes d'intégrité des 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!