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

Java Discussion :

Problème de synchronisation avec attribut


Sujet :

Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Problème de synchronisation avec attribut
    Bonjour, j'ai un petit problème avec un programme que j'essaye de terminer pour ce soir. Voilà le souci : j'ai un Thread qui possède en attribut un objet de type message. Ce message est initialisé à null.

    Le processus se met en wait() tant que le message est à null. Dès qu'il est différent de null, on l'envoit par un ObjectOutputStream. Ensuite, on remet le message à null pour ne pas l'envoyer plusieurs fois de suite.

    Le seul moyen pour changer l'état du message, c'est qu'un autre processus appelle la méthode messageOut(Message m) qui change la valeur de l'attribut de la classe.

    Voici le code de la classe :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    public class Diffuseur implements Runnable, DiffuseurInterface {
    	private Socket sd;
    	private ObjectOutputStream out;
    	private Message msg;
    	public Diffuseur(Socket sd){
    		this.sd = sd;
    		try{
    			out = new ObjectOutputStream(sd.getOutputStream());
    		}
    		catch(Exception e){e.printStackTrace();};
    		DiffuseurManager.lesDiffuseurs.add(this);
    		msg = null;
    		new Thread(this).start();
    	}
     
    	@Override
    	public synchronized void run() {
    		try{
    		out.writeObject(new Message(afficherAide(),"Message du serveur","",false));}
    		catch(Exception e){e.printStackTrace();}
    		while(true){
    			try{
    				while(msg == null) this.wait();
    				out.writeObject(msg);
    				msg = null;
    			}
    			catch(Exception e){
    				e.printStackTrace();
    				try{
    					sd.close();
    				}
    				catch(IOException c){
    				e.printStackTrace();
    				}
    				break;
    		   }
    		}
    	}
    	public static String afficherAide(){
    		String s = "blabla";
    		return s;
    	}
    	public synchronized void messageOut(Message msg){
    		try{
    			while(this.msg != null) this.wait();
    		}
    		catch(InterruptedException e){e.printStackTrace();}
    		this.msg = msg;
    	}
     
    }

    Je pense que c'est un problème de synchronisation. Quand j'affiche le message dans la méthode de réception (par un System.out.println(this.msg)) ,j'ai le bon message qui s'affiche... Je sais pas comment résoudre ce problème donc je me tourne vers vous.

    J'ai essayé avec des this.notifyAll() à la fin de la méthode d'acquisition du message ainsi qu'après l'envoi du message par l'ObjectOutputStream, mais rien n'y fait... Il y a un deadlock (selon ce que je pense) que je n'arrive pas à dénouer

    Merci d'avance,

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Re-bonjour.

    Honte à moi, j'avais oublié de faire une boucle sur le Thread de réception du client... Désolé vraiment.

    Bonne soirée !

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

Discussions similaires

  1. Problème de synchronisation avec 2 requêtes
    Par PAYASS59 dans le forum Webi
    Réponses: 7
    Dernier message: 30/11/2010, 14h59
  2. Problème de synchronisation avec les tables
    Par rimy2mi dans le forum Hibernate
    Réponses: 0
    Dernier message: 11/11/2009, 10h14
  3. Réponses: 2
    Dernier message: 13/03/2009, 11h11
  4. Problème de synchronisation avec Hibernate
    Par toutoune60 dans le forum JSF
    Réponses: 2
    Dernier message: 15/04/2007, 12h27
  5. Réponses: 13
    Dernier message: 20/03/2007, 17h04

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