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 de conception Thread et Socket


Sujet :

Concurrence et multi-thread Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Points : 26
    Points
    26
    Par défaut Problème de conception Thread et Socket
    Salut,


    J'ai un problème de conception avec une application.

    J'ai un controleur et un objet qui fait l'interface avec le serveur.
    Le controleur a une méthode boolean login(); qui permet de se loguer. (Sa signature ne peut pas être changée)

    En gros, voici mes classes

    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
    26
    27
    28
    29
    30
    class controller {
     
      Server s;
     
      boolean login() {
        s.sendMessage(...);
        wait();
        return (connecté ou non)
     }
     
      void receiveMessageFromServer(String message) {
        // Traitement du message
        Si le message a trait avec le login:
        notify();
        // D'autres types de messages peuvent arriver
      }
    }
     
    class Server {
    Socket s....
    void sendMessage() {
        s. send(...);
    }
     
    Server() {
      new Thread([...]);
      // Ce thread lit tout ce qui vient du serveur et appelle controller.receiveMessageFromServer();
    }
     
    }

    Mon but est donc de bloquer l'execution de login() tant que je n'ai pas reçu de réponse.

    Si je lance mon code, j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    10-05 16:12:22.970: ERROR/AndroidRuntime(842): java.lang.IllegalMonitorStateException: object not locked by thread before wait()
    Comment faire pour bloquer ma methode login() en attendant une réponse ? (et dans l'idéal, les autres messages devraient pouvoir être traités en attendant)

    Je développe pour Android, mais je ne pense pas que ça ait un rapport.

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Il ne faut pas rajouter des synchronized ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Il ne faut pas rajouter des synchronized ?
    Synchronized permet simplement de poser automatiquement un mutex.

    Ici je ne vois pas le rapport.

    Pour la méthode login c'est toi qui l'implémente ?
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Il ne faut pas rajouter des synchronized ?
    Si, il le faut : wait() ne s'exécute que dans un environnement synchronisé.

  5. #5
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Citation Envoyé par dingoth Voir le message
    Si, il le faut : wait() ne s'exécute que dans un environnement synchronisé.
    J'avais pas vu le wait
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Alain Defrance Voir le message
    Synchronized permet simplement de poser automatiquement un mutex.

    Ici je ne vois pas le rapport.
    Le rapport c'est que wait exige que tu aie au préalable obtenu le lock sur l'objet en question, via un synchronized. De manière générale donc, wait s'utilise comme ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    synchronized(object){
        object.wait();
    }

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    héhé, il m'arrive aussi de dire des truc juste
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 18h24
  2. Gestion des départements problème de conception
    Par snoopy69 dans le forum Modélisation
    Réponses: 7
    Dernier message: 11/10/2005, 13h08
  3. Réponses: 5
    Dernier message: 10/05/2005, 10h22
  4. [Conception] Threading
    Par mouloude dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 08/12/2004, 10h17
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/05/2004, 23h13

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