IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

HashTable + ConcurrentModificationException


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Lycéen
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Points : 16
    Points
    16
    Par défaut HashTable + ConcurrentModificationException
    Bonsoir :o)
    Voilà j'ai un soucis avec un Hashtable dans mon programme. Mon Hashtable est utilisé un peu partout dans mon programme dans des threads bien différents, mais lorsque je souhaite quitter, j'execute une méthode quitterProgramme() qui est dans le thread UI donc qui fait celà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private void quitterProgramme() 
    {	
    	for (Iterator<Integer> it = serveurs.keySet().iterator() ; it.hasNext() ; )
    	{
    		serveurs.get(it.next()).deconnexionServeur();
    		it.remove();
    	}
    }
    Cependant, quand j'arrive au it.remove() il arrive bien souvent que celui-ci soit entrain d'être modifié ou autre. Et donc j'ai une exception :

    Caused by: java.util.ConcurrentModificationException
    at java.util.Hashtable$HashIterator.remove(Hashtable.java:771)

    Mais normalement, le HashTable n'est pas censé être synchronisé ? Pour justement empêcher ce genre de soucis ? J'ai du mal comprendre quelque chose je crois ..
    Il n'y a donc pas un moyen de dire au it.remove() de s'executer juste après la modification en cours ?

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Quand tu accède à une collection avec un iterator et que tu veux la modifier, cette exception est levée.

    Pour contourner le problème tu peux prendre une liste temporaire que tu charges ensuite tu fais un removeAll(), ou alors parcourt ta collection avec un indice après l'avoir transforme en List.

    Surtout n'utilise pas le for each car c'est basé sur l'iterator!

    En espérant t'avoir aidé.

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Aerialls Voir le message
    mais lorsque je souhaite quitter, j'execute une méthode quitterProgramme() qui est dans le thread UI donc qui fait celà
    2 remarques :
    • Les déconnexions ne doivent pas se faire dans le thread UI car cela peut figer ton interface graphique...
    • Quel intérêt y-a-t-il à supprimer les éléments de la Map avant de quitter le programme ?


    a++

  4. #4
    Membre à l'essai
    Profil pro
    Lycéen
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Quel intérêt y-a-t-il à supprimer les éléments de la Map avant de quitter le programme ?

    a++
    Humm c'est vrai qu'en y réfléchissant ... c'est pas super utile pour quitter. Je crois que je vais tout simplement l'enlever et exécuter le reste du traitement de fermeture dans un nouveau thread. Merci beaucoup

Discussions similaires

  1. [VB.NET] HashTable
    Par mardoch dans le forum ASP.NET
    Réponses: 8
    Dernier message: 23/06/2009, 12h58
  2. [JSP][STRUTS]Cle d'une hashtable
    Par julienOriano dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 23/06/2004, 13h47
  3. [Collection] ConcurrentModificationException
    Par calvin dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 19/05/2004, 09h00
  4. Hashtable
    Par Gogoye dans le forum C
    Réponses: 5
    Dernier message: 23/09/2003, 16h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo