Bonjour,
j'écris ce post car je ne comprends pas très bien la problématique de concurrence d'accès.
Voici un bean très simple :
J'ai réalisé les 3 tests suivants sans avoir d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import java.io.Serializable; public class MonBean implements Serializable { /** * Sérialization. */ private static final long serialVersionUID = 1L; private String maChaine = null; /** * Constructeur.. */ public MonBean() { } public String getMaChaine() { return this.maChaine; } public void setMaChaine(String maChaine) { this.maChaine = maChaine; } }
- 2 threads qui font appel en même temps à la méthode getMaChaine() pendant 15 secondes
- 1 thread qui lit sans cesse la méthode getMaChaine() pendant 15 secondes et un autre thread qui fait appel à la méthode setMaChaine() 5 secondes après son démarrage
- 1 thread qui lit sans cesse la méthode getMaChaine() pendant 15 secondes et deux autres threads qui mettent à jour via la méthode setMaChaine() 5 secondes après leurs démarrages pendant 5 secondes...
Je ne comprends pas, je n'obtient jamais d'Exception, pas de ConcurrentModificationException...
Que doit-il se passer si deux threads accèdent en même temps à la méthode getMaChaine() ? Une exception doit-être soulevée ? Si aucune exception est levée, quel est l'intérêt de protéger la méthode avec synchronized ?
Que doit-il se passer si deux threads accèdent en même temps à la méthode getMaChaine() pour l'un et setMaChaine() pour l'autre ? Une exception doit-être soulevée ? Si aucune exception est levée, on ne sait pas ce que va retourner getMaChaine()... C'est cela le problème ?
Enfin, que doit-il se passe si deux threads accèdent en même temps à la méthode setMaChaine() ? Une exception doit-être soulevée ? On ne sait pas quel thread sera prioritaire ? C'est çà le problème ?
Merci pour votre aide,
F.
Partager