1. Définition
Java
1 mot-clé / modificateur dans.
Garanti pour être volatile
modifiée partagée variables et ordonnée visibilité , mais ne garantit pas atomicité
3. Description spécifique
Ci - dessous, je vais vous expliquer en détail volatile
comment faire en sorte que « la variable partagée visibilité et ordonnée , mais ne garantit pas atomicité » des principes spécifiques
Connaissance des réserves: atomicité, visibilité & ordre
3.1 Assurer la visibilité
- La description spécifique de l'
volatile
attribut modifié garantit que la dernière valeur peut être lue à chaque lecture. Mais ne pourra pas & ne pourra pas mettre à jour la valeur qui a été lue
- Principe
La valeur d'attribut partagée modifiée par le thread A dans la mémoire de travail sera immédiatement actualisée dans la mémoire principale , et chaque fois que le thread B / C / D lit et écrit la clôture pour obtenir une lecture similaire à la lecture de la valeur d'attribut directement depuis la mémoire principale
- C'est juste similaire, certaines lectures et écritures en ligne que les variables volatiles modifiées lisent et écrivent directement dans la mémoire principale, cette déclaration est fausse, montre simplement un comportement similaire
- La clôture en lecture-écriture est une instruction du processeur; insérer une clôture en lecture-écriture = indique au processeur et au compilateur qu'elle doit s'exécuter avant cette commande, puis s'exécuter après cette commande (ordonnée)
- Une autre fonction de la barrière de lecture-écriture est de forcer une mise à jour du cache pour différents CPU. Par exemple, une clôture d'écriture actualisera les données écrites avant cette clôture dans le cache pour assurer la visibilité
3.2 Assurer la commande
-
Description détaillée
Lors de l'exécution d'opérations de lecture / écriture sur des attributs modifiés volatils, le code précédent doit avoir été exécuté et le résultat est visible pour les opérations suivantes -
Principe Lors de la
réorganisation,volatile
le code d'opération de lecture / écriture qui modifie l'attribut est la ligne de séparation . Le code avant l'opération de lecture / écriture ne peut pas être trié vers l'arrière et le même ne doit pas être trié vers l'avant. Ordonné
3.3 Aucune garantie d'atomicité
- Description détaillée de
volatile
l'attribut modifié si la valeur lue avant la modification, la modification, ne peut pas changer la valeur du travail a été copié dans la mémoire. C'est à dire ne peut pas empêcher la concurrence
- Principe
// 变量a 被volatile修饰
volatile static int a=0; a++; // 包含了2步操作:1 = 读取a、2= 执行a+1 & 将a+1结果赋值给a // 设:线程A、B同时执行以下语句,线程A执行完第1步后被挂起、线程B执行了a++,那么主存中a的值为1 // 但线程A的工作内存中还是0,由于线程A之前已读取了a的值 = 0,执行a++后再次将a的值刷新到主存 = 1 // 即 a++执行了2次,但2次都是从0变为1,故a的值最终为1
4. Scénarios d'application
En raison de la volatile
garantie de visibilité et d'ordre, les volatile
attributs partagés modifiés n'ont généralement pas de problème en lecture / écriture simultanée, ce qui peut être considéré comme une synchronized
implémentation légère .
Pour synchronized
l'explication spécifique, veuillez consulter l'article: Java: il s'agit d'un guide d'apprentissage des mots clés synchronisé complet et détaillé
5. Résumé
- Cet article explique
Java
levolatile
mot - clé, dont le rôle est d' assurer la visibilité et la commande « variables partagées , en particulier résumées comme suit: