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 :

[Débutant][Threads] Problème de synchronisation


Sujet :

Concurrence et multi-thread Java

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 14
    Points : 11
    Points
    11
    Par défaut [Débutant][Threads] Problème de synchronisation
    Je programme un jeu de bataille navale en réseau

    J'ai créé un service pour prendre en charge chaque joueur se connectant à mon server (serviceJoueur extends Thread). Chaque joueur exécute un nombre de formalités avant d'attendre le début de la partie (choisir son pseudo, choisir un groupe, placer ses bateaux) !

    Lorsque mes deux équipes sont remplies, je décide de refuser toute nouvelle connection au serveur et de lancer un nouveau service : servicePartie extends Thread.

    Le problème : j'aimerais démarrer ma partie lorsque TOUS les joueurs ont franchi l'étape PLACEMENT DES BATEAUX.

    Comment faire en sorte que mon servicePartie écoute simultanément toutes les notifications provenant des joueurs ?

    Cordialement,

    Dorian.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 14
    Points : 11
    Points
    11
    Par défaut précisions :
    Dans mon server je tente d'exécuter l'instruction suivante :

    java.lang.IllegalMonitorStateException: current thread not owner

    at java.lang.Object.wait(Native Method)

    at java.lang.Object.wait(Object.java:426)

    at sbn.main(sbn.java:71)


    contenu de mon pseudoSémaphore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    synchronized public void V() {
        valeur=valeur+1;
        if (valeur == limite) notifyAll();
      }
    Lorsque j'atteins une certaine valeur, il est censé débloquer l'instruction du début. Mais au lieu de ça, j'engendre une exception.
    Question : wait() n'est il pas bloquant ? comment éviter cette erreur.

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Bonsoir,

    Pour mettre en pause ton thread, tu peux peut être utiliser la méthode sleep des objets de la classe Thread

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    je ne peux pas utiliser la méthode sleep, étant donné que je ne peux pas connaître le moment où tous les joueurs auront placé leurs bateaux...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 14
    Points : 11
    Points
    11
    Par défaut thinking java
    c'est bon j'ai trouvé la réponse dans thinking java.

    "Si vous appelez wait() ou notify() dans une méthode qui n'est pas synchronized, le programme se compilera, mais quand vous l'exécuterez vous obtiendrez une IllegalMonitorStateException avec le message peu intuitif « current thread not owner. » Notez que sleep(), suspend(), et resume() peuvent toutes être appelées dans des méthodes non-synchronized puisqu'elle ne manipulent pas le verrou. "

    Suffit de synchroniser sur mon pseudo sémaphore pour que le wait trouve un verrou à bloquer et ça marche !


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/02/2010, 23h21
  2. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  3. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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