Bonjour à tous,
je viens à vous pour une petite question à propos du mot clef final:
J'ai plusieurs threads qui peuvent s'échanger des événements au moyen de listeners.
Petit exemple de code avec ici l'utilisation d'un Timer (mais je désirerais une réponse la plus générale possible):
Voilà l'idée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public synchonrized void maFonction(int maVariable) { final maVariableFinal = maVariable; javax.swing.Timer timer = new javax.swing.Timer( GROS_DELAI, new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(maVariable); } } ); }
1/ Au temp T On a donc un thread 'x' qui appelle maFonction qui va lancer un événement qui se produira dans un autre thread (ici, l'EDT) beaucoup, beaucoup plus tard.
2/ d'ici à temp (T + GROS_DELAI), il est fort probable que maFonction() soit appelée par plein d'autres threads (y compris des threads qui veulent l'appeler en même temps), et avec plein de valeurs différentes pour maVariable.
3/ Lorsque viendra le temps T + GROS_DELAI, je voudrais être sûr que l'action sera bien exécutée avec la bonne valeur pour maVariable, ainsi que tous les autres appels des autres threads.
D'où ma question : mon code ci-dessus est-il suffisant, ou je risque d'être confronté à des soucis de concurrence (ou autre) ?
Merci d'avance pour vos conseils avisés![]()
Partager