S'il vous plaît se référer à UMLQuel objet devrais-je verrouiller lorsque je passe une collection <Foo> dans une classe séparée?
Le constructeur de la classe Connection initialise ses foos membre via
foos = Collections.synchronizedList(new ArrayList<Foo>(10));
Lorsque la connexion # start() est appelée, elle crée une instance de Poller (en passant les foos référence dans le constructeur de Poller) & Poller est démarré (Poller est un Runnable).
Question: Le fil Poller va ajouter à & objets supprimer de la liste en fonction des événements extérieurs. Périodiquement, les clients appellent Connection # snapshot() pour récupérer la liste. Étant donné que l'implémentation dans Poller effectuera une vérification pour éviter les doublons lors des ajouts, elle n'est pas sécurisée pour les threads.
par exemple. # Poller Application de l'exécution
if(_foos.indexOf(newFoo) == -1)
{
_foos.add(newFoo);
}
Que puis-je synchroniser dans Connexion ainsi que Poller à l'ordre d'être thread-safe?
Vous pouvez intégrer des images dans votre question, vous n'avez pas besoin d'utiliser un lien externe. –