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

Concurrence et multi-thread Java Discussion :

Problème avec mon thread


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut Problème avec mon thread
    Salut à tous,
    Je développe un thread qui compare le nombre de lignes de ma base de données à chaque 7 secondes dont le code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public void run(){
     
          String query = "select count(*) from produit ";
          try{
                 ResultSet rs=cn.getResultat(query);
              while (rs.next()) {
               nblignes = rs.getInt(1);
                    }
                    rs.close();
              } catch (Exception e) {
          JOptionPane.showMessageDialog(null, "Erreur lors de l'exécution de la requête recherche nombre enregistrement client");
               }
        while (isAlive()){
              if (verifier(nblignes)==false){
                   JOptionPane.showMessageDialog(null, "Une modification a été effectué sur la table produit");
     
              }
                       try {
                       Thread.sleep(7000);
                          } catch (InterruptedException ex) {
                  Logger.getLogger(EspionProduit.class.getName()).log(Level.SEVERE, null, ex);
                 }
     
            }
    le code de la méthode verifier():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     public boolean verifier(int x) {
            String query2 = "select count(*) from produit ";
          try{
                 ResultSet rs=cn.getResultat(query2);
              while (rs.next()) {
               nblignes2 = rs.getInt(1);
                    }
                    rs.close();
              } catch (Exception e) {
          JOptionPane.showMessageDialog(null, "Erreur lors de l'exécution de la requête recherche du nouveau nombre enregistrement client");
                }
     
             if( nblignes2 != x) {
                        //System.exit(-1);
     
                        return false;
                    }
             else
     
                    return true;
                }
    et quand j'exécute ce thread dans ma page principale à travers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     EspionProduit thread = new EspionProduit();
            // Activation du Thread
            thread.start();
    et j'insère par la suite une nouvelle ligne dans notre base, le thread m'affiche qu'une modification a était lieu mais ce message s'affiche toute les 7 secondes ... Alors que je voulais qu'il me l'affiche une seule fois et la nouvelle valeur(=du nombre de lignes) devient celle que le thread va la comparer avec la sienne....
    J'espère que vous m'avez compris ... Que dois-je faire?
    Mrci pour votre coopération ...

  2. #2
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Juste une question, est ce normal que tu fasses 2 fois la meme requete.
    Une dans la méthode run de ton thread et l'autre dans la méthode vérifier??

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut
    Citation Envoyé par publicStaticVoidMain Voir le message
    Juste une question, est ce normal que tu fasses 2 fois la meme requete.
    Une dans la méthode run de ton thread et l'autre dans la méthode vérifier??
    Je veut que le thread récupère la valeur de nblignes dés son déclenchement (par la méthode start ()) et puis il va invoquer la méthode vérifier danslaquelle on va obtenir la nouvelle valeur et puis on fait la comparaison entre les 2 valeurs ... c'est ça mon principe

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Salut,

    tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(verifier(nblignes)==false)){}
    Mais quand es que tu redonne la nouvelle valeur de nblignes ?

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut
    Citation Envoyé par Bbaboulinet Voir le message
    Salut,

    tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(verifier(nblignes)==false)){}
    Mais quand es que tu redonne la nouvelle valeur de nblignes ?
    C'est ça mon problème, j'ai pas su ou dois-je mettre l'instruction d'affectation de la nouvelle valeur ...

  6. #6
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    Je veut que le thread récupère la valeur de nblignes dés son déclenchement (par la méthode start ()) et puis il va invoquer la méthode vérifier danslaquelle on va obtenir la nouvelle valeur et puis on fait la comparaison entre les 2 valeurs ... c'est ça mon principe
    Pour cela, tu peux initialiser ton compteur nbLignes au demarrage de ton thread.

    Apres au lieu de renvoyer un boolean avec verifier(nbLignes) tu peux renvoyer le resultat de la lecture comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public int lectureNbLignesBD(final Connection connection)
    {
        int nbLignes = -1;
        String query = "select count(*) from produit ";
        try
        {
            ResultSet rs=connection.getResultat(query);
            while (rs.next()) 
            {
                nbLignes = rs.getInt(1);
            }
            rs.close();
        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(null, "Erreur lors de l'exécution de la requête recherche nombre enregistrement client");
        }
        return nbLignes;
    }
    Et ton thread comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    public void run()
    {
        int nbLignes =lectureNbLignesBD(cn);
     
        while (isAlive())
        {
            if ((nbLignes > 0) && (lectureNbLignesBD(cn) != nbLignes))
            {
                JOptionPane.showMessageDialog(null, "Une modification a été effectué sur la table produit");
            }
            try
            {
                Thread.sleep(7000);
            }
            catch (InterruptedException ex) 
            {
                Logger.getLogger(EspionProduit.class.getName()).log(Level.SEVERE, null, ex);
            }
        }      
    }

  7. #7
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    j'ai pas lu ton code mais j'ai tiqué sur le while(isAlive()) ....
    tu attends quoi?
    quand on est mort c'est pour la vie! comment peut-on être mort et vivant en même temps?

    y a queque chose qui m'échappe ...

    salut
    la souris de La Marsa

  8. #8
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut
    Merci pour votre réponse ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public int lectureNbLignesBD(final Connection connection)
    {
        int nbLignes = -1;
        String query = "select count(*) from produit ";
        try
        {
            ResultSet rs=connection.getResultat(query);
            while (rs.next()) 
            {
                nbLignes = rs.getInt(1);
            }
            rs.close();
        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(null, "Erreur lors de l'exécution de la requête recherche nombre enregistrement client");
        }
        return nbLignes;
    }
    Et ton thread comme ceci

    [/QUOTE]
    Pourquoi tu entres en paramètre une variable de type connexion, en quoi ça va m'aider?

Discussions similaires

  1. [Mail] Problème avec mon script d'envoi de mail
    Par leroivert dans le forum Langage
    Réponses: 18
    Dernier message: 02/12/2005, 00h26
  2. Problème avec mon service mysql et PhpMyAdmin
    Par Fixazo dans le forum Outils
    Réponses: 1
    Dernier message: 28/08/2005, 18h02
  3. problème avec mon lecteur CD
    Par leo13 dans le forum Périphériques
    Réponses: 3
    Dernier message: 16/08/2005, 11h21
  4. Réponses: 5
    Dernier message: 10/05/2005, 10h22
  5. Problème avec mon firewall ...
    Par Wis dans le forum Tomcat et TomEE
    Réponses: 15
    Dernier message: 06/04/2004, 08h46

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