Bonjour,
En effet, le mot clé synchronized remplit cette fonction. Ceci permet de poser un verrou sur les variables de la classe, ce qui empêche un client appelant cette méthode de travailler sur la même variable qu'un autre. Si tu ne modifies aucune variable de classe dans ta méthode, cela est inutile. tu peux aussi ne synchroniser qu'une variable à la fois en utilisant la syntaxe suivante :
1 2 3 4 5
| public void maMethode(){
synchronized(maList){
maList.add(anElement);
}
} |
Le problème est que cela augmente le temps de réponse de ta méthode à cause des blocages successifs. Une autre solution consiste donc à déclarer les variables sensibles aux traitements concurrents comme "volatile".
private volatile List maList;
La méthode qui est copiée dans le cache de chaque programme l'appelant va alors devoir chercher auprès du serveur(objet) la valeur des attributs "volatile". Cela force la synchronisation en obligeant les appelants à travailler avec une valeur à jour des variables. C'est plus rapide mais la synchronisation est moins performante.
Espérant que ça te donne une piste, tu peux trouver des compléments dans la l'api java.
Partager