Anonymous classes, variable final et concurrence entre threads.
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):
Code:
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);
}
}
);
} |
Voilà l'idée.
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 :D