Volatile fournit un mécanisme de synchronisation faible pour garantir que les mises à jour des variables sont notifiées aux autres threads. Les variables volatiles ne sont pas mises en cache dans les registres ni invisibles pour les autres processeurs, donc la lecture d'une variable volatile renvoie toujours la valeur écrite la plus récemment. Cela peut être imaginé comme la sémantique suivante, mais volatile est un mécanisme de synchronisation plus léger. Volatile ne peut assurer que la visibilité, mais pas l'atomicité. En d'autres termes, les variables volatiles ne peuvent pas être utilisées dans des opérations composites, telles que i++.
Copiez le code comme suit :
public synchronisé void setValue (valeur int) {
this.value = valeur ;
}
public synchronisé int getValue(){
valeur de retour ;
}
Les variables volatiles ne peuvent être utilisées que lorsque toutes les conditions suivantes sont remplies :
1. L'opération d'écriture dans la variable ne dépend pas de la valeur actuelle de la variable, ou vous pouvez vous assurer qu'un seul thread met à jour la valeur de la variable.
2. Cette variable ne sera pas incluse dans la condition d'invariance avec d'autres variables d'état
3. Il n'est pas nécessaire de verrouiller lors de l'accès aux variables.