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 : 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);
            }
        }
    );
}
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