Bonjour,
Je cherche à mettre en place un système de timeout pour un système de simulation de réseaux P2P dans lequel les différents pairs communiquent par envoi de message.
Le timeout est pour l'envoi d'un message : si pas de réponse, réémission du message, puis si 2ème timeout, annulation de la communication. J'ai trouvé des exemples qui utilisent des threads pour gérer ça, mais dans mon cas je ne peux pas utiliser de threads (c'est une simulation).
Il faut aussi préciser que j'ai ma propre base de temps (une fonction qui s'execute périodiquement, gérée par le simulateur).
Pour le moment j'ai créé un timer, dont la valeur est décrémentée à chaque unité de temps, et lorsqu'elle atteint 0, on exécute une methode qu'on a passée en paramètre à la création. Cette méthode fait toujours la même chose : renvoyer le message puis armer un deuxième timer.
Mon problème vient de ce dernier point : en effet, je gère au niveau de mon application une liste de timers, que je parcours à chaque unité de temps pour décrémenter tous les timers, et lancer la méthode dont je parlais précédemment lorsqu'un timer atteint 0. Or comme cette méthode modifie la liste (elle ajoute le 2ème timer), j'obtiens tout naturellement une belle ConcurrentModificationException.
La question (enfin !) est donc : comment dois-je m'y prendre (je pense que ce système doit être mal conçu, mais je ne vois pas comment faire autrement) pour éviter cette exception ?
Merci d'avance.
Partager