Fonctionnement de java en cas de concurrence d'accès
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 :
Code:
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;
}
} |
J'ai réalisé les 3 tests suivants sans avoir d'erreur :
- 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.