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

Langage Java Discussion :

Synchronisation méthode ou variable de classe


Sujet :

Langage Java

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 464
    Points : 332
    Points
    332
    Par défaut Synchronisation méthode ou variable de classe
    Bonjour,

    Je me suis sorti de mes problèmes de synchronisation et de rafraîchissement graphique de mon dernier message mais j'ai besoin d'éclaircissements : d'ailleurs en fait le vrai problème n'était pas un problème de synchronisation contrairement à ce que je pensais.

    Donc j'ai une méthode qui ne doit pas pouvoir s'exécuter plusieurs fois en parallèle, elle s'auto-exclut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class TestSynchro 
    {
     
    	private void maMethodeSynchrone() 
    	{
                  //cette méthode fait plusieurs chose dont redessiner l'interface graphique
                  //elle ne doit pas pouvoir être appelée tant qu'elle est en cours d'exécution
             }
    }
    Comme elle redessine l'interface j'ai englobé le code de la méthode par SwingUtility

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	private void maMethodeSynchrone() 
    	{
    		SwingUtilities.invokeLater(new Runnable() 
                   { 			
                             public void run()
    			{
                            }
                    });
             }
    J'ai utilisé une variable de classe pour synchroniser
    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
     
    public class TestSynchro 
    {
            boolean verrou = false
    	private void maMethodeSynchrone() 
    	{
    		SwingUtilities.invokeLater(new Runnable() 
                   { 			
                             public void run()
    			{
                                  while(verrou)
                                  {
                                         Thread.sleep(200);
                                   }
                                   verrou = true;
                                   .../... traitement
                                   verrou = false;
                            }
                    });
             }
    }
    J'ai essayé aussi cette méthode
    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
     
    public class TestSynchro 
    {
            Boolean verrou = false;
            //on veut utiliser synchronized(verrou) donc verrou doit être un objet 
    	private void maMethodeSynchrone() 
    	{
    		SwingUtilities.invokeLater(new Runnable() 
                   { 			
                             public void run()
    			{
                                  synchronized(verrou)
                                  {
                                   verrou = true;
                                   .../... traitement
                                   verrou = false;
                                   }
                            }
                    });
             }
    }
    J'ai plusieurs questions
    1) est-il vraiment nécessaire d'utiliser SwingUtilities ici ? Le revalidate() est en fait appelé en dehors de la méthode, mais il y a plusieurs setSize, setPreferredSize et j'utilise un JScrollPane qui ne semble pas ThreadSecurity ?
    2) quelle est la meilleur façon de verrouiller la méthode, la première ou la deuxième ?
    3) dans la deuxième, est-il nécessaire de donner une valeur à verrou ?

    Merci de vos réponses.
    C'est en respectant les autres que l'on se fait respecter.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    Ce code est suffisant pour qu'une méthode ne puisse pas être exécutée simultanément par deux threads :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class TestSynchro 
    {
     
    	private synchronized void maMethodeSynchrone() 
    	{
                  //cette méthode fait plusieurs chose dont redessiner l'interface graphique
                  //elle ne doit pas pouvoir être appelée tant qu'elle est en cours d'exécution
             }
    }
    Romain.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/02/2012, 17h15
  2. Réponses: 10
    Dernier message: 28/05/2009, 09h29
  3. Réponses: 6
    Dernier message: 23/09/2005, 12h54
  4. [Interface] Appeller toutes les méthodes héritées d'un class
    Par thibaut.d dans le forum Général Java
    Réponses: 4
    Dernier message: 25/01/2005, 08h42
  5. [Reflection] Exécuter une méthode donnée d'une classe
    Par schousso dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/06/2004, 10h35

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