Bonjour à tous,
Soit l’attribut end
de la classe A
; il est de type boolean
.
La classe A
hérite de Thread
et fait usage de son attribut end
dans un while
, comme suit :
1 2 3 4 5 6 7 8 9 10 | class A extends Thread { private boolean end; public A() { this.end = false; } public void run() { while(!this.end) { ... } } } |
Cette même classe propose également un setter (méthode end()
) pour ré-écrire cet attribut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class A extends Thread { private boolean end; A() { this.end = false; } public void run() { while(!this.end) { ... } } void end() { this.end = true; } } |
Une classe B
, qui n’hérite pas de Thread
mais qui contient la méthode public static void main(String[] args)
ET QUI DONC est le thread principal, fait appel au setter de la classe A
:
1 2 3 4 5 6 7 8 9 10 11 | class B { public static void main(String[] args) { ... A a = new A(); ... a.end(); ... } } |
Ma question est : faut-il synchroniser le setter end()
de la classe A
?
Autrement dit : est-il possible que le thread de la classe A
évalue la valeur de l’attribut end
dans son while
et qu’"en même temps" (bon c’est jamais réellement simultané mais passons), le thread principal (classe B
) modifie cette valeur ? On aurait alors un problème de concurrence. Et donc il faudrait effectivement mettre en place une synchronisation.
Qu’en dites-vous ?
Merci d’avance.