Les variables volatiles ont des propriétés de visibilité synchronisées, mais n'ont pas de propriétés atomiques. Cela signifie que les threads peuvent découvrir automatiquement la dernière valeur des variables volatiles. Les variables volatiles peuvent être utilisées pour assurer la sécurité des threads, mais uniquement pour un ensemble très limité de cas d'utilisation : il n'y a aucune contrainte entre plusieurs variables ou entre la valeur actuelle et la valeur modifiée d'une variable. Par conséquent, volatile seul n'est pas suffisant pour implémenter des compteurs, des mutex ou quoi que ce soit avec des invariants liés à plusieurs variables.
Le mot clé volatile est un mécanisme de synchronisation légèrement plus faible en Java, pourquoi est-il appelé mécanisme faible.
Avant de comprendre cela, jetons d'abord un coup d'oeil aux deux mécanismes que Java doit respecter lors de la synchronisation :
1. Visibilité : Lorsqu'un thread modifie une variable partagée, un autre Le thread peut lire cette valeur modifiée.
2. Atomicité : fait référence à l'indivisibilité. Cela signifie ici que lors de l'exécution du programme, si une opération ne peut être interrompue, il s'agit d'une opération atomique.
Le mot-clé volatile ne garantit pas l'atomicité, mais seulement la visibilité. Par conséquent, ce mot-clé ne peut pas être utilisé pour les opérations de synchronisation dans des circonstances normales. Cependant, il peut être utilisé pour la synchronisation lorsque les deux conditions spécifiques suivantes sont remplies :
1. Le résultat de l'opération ne dépend pas de la valeur actuelle de la variable, ou il peut être garanti qu'un seul thread modifie la valeur de la variable.
2. Les variables n'ont pas besoin de participer à des contraintes invariantes avec d'autres variables d'état
Exemple :
volatile boolrean flag; public void close(){ flag = true; } public void open(){ while(!flag){ ... } }
À l'heure actuelle, l'exécution de la méthode open() dépend de la valeur de l'indicateur et la synchronisation doit être utilisée. Cependant, il est fastidieux d'utiliser le mot-clé synchronisé ou d'autres méthodes pour synchroniser. au-dessus de deux conditions, le mot-clé volatile peut donc être utilisé pour la synchronisation.
Principe du mot-clé volatile :
Les variables modifiées par volatile ne seront pas mises en cache dans des registres ou à d'autres endroits. Chaque écriture est écrite directement dans la mémoire principale, et le. il en va de même pour les lectures. La visibilité est donc garantie.
Ce qui précède sont les précautions d'utilisation du mot-clé volatile en Java introduites par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra. dans le temps. Je voudrais également vous remercier tous pour votre soutien au site Web PHP chinois !
Pour plus d'articles sur les précautions d'utilisation du mot-clé volatile en Java, veuillez faire attention au site Web PHP chinois !