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