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:
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:
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:
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:
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.