Fil volatil

 

1. Définition

Java 1 mot-clé / modificateur dans.

Garanti pour être volatilemodifié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 volatilecomment 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'
    volatileattribut 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
  1. 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
  2. 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)
  3. 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, volatilele 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
    volatilel'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 volatilegarantie de visibilité et d'ordre, les volatileattributs 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 synchronizedimplémentation légère .

  Pour synchronizedl'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 Javale volatilemot - clé, dont le rôle est d' assurer la visibilité et la commande « variables partagées , en particulier résumées comme suit:
 
 

Je suppose que tu aimes

Origine www.cnblogs.com/awkflf11/p/12676745.html
conseillé
Classement