English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Le modificateur volatile indique au JVM que les threads accédant à des variables volatile doivent toujours obtenir les données à partir de la mémoire. C'est-à-dire que les threads ne devraient pas mettre en cache les variables volatile.
Accéder à une variable volatile synchronise toutes les copies des variables en mémoire principale qui sont en cache. Les variables variables ne peuvent être appliquées qu'aux types d'objets ou aux variables d'instance privées. Une référence d'objet volatile peut être null.
public class MyRunnable implements Runnable { private volatile boolean active; public void run() { active = true; while (active) { // line 1 //Certaines lignes de code ici } } public void stop() { active = false; // line 2 } }
Même si nous déclarons le tableau comme volatile, les éléments du tableau n'ont pas de comportement volatile.
Pour résoudre ce problème, Java fournit deux classes, à savoir AtomicIntegerArray et AtomicLongArray, qui représentent des tableaux avec des enveloppes atomiques sur les variables (respectivement) ; les éléments de ces tableaux sont mis à jour automatiquement.
C'est-à-dire, les éléments de ces classes représentant les tableaux peuvent être accédés comme des variables volatiles. Ces classes fournissentget()
etset()
variables pour rechercher ou assigner des valeurs à chaque élément.
Étant donné que les wrappers atomiques peuvent être utilisés pour les types entiers et long, tandis que les autres types de données peuvent être utilisés, il est nécessaire de réaffecter la référence du tableau à chaque allocation d'élément dans le tableau.
volatile int[] myArray = new int[3]; myArray [0] = 100; myArray = myArray; myArray [1] = 50; myArray = myArray; myArray [2] = 150; myArray = myArray;