English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
El modificador volatile indica a la JVM que el hilo que accede a variables volátiles siempre debe obtener los datos desde la memoria. Es decir, el hilo no debe cachear variables volátiles.
El acceso a variables volátiles sincroniza todas las copias de variables en caché en la memoria principal. Las variables variables solo se pueden aplicar a tipos de objetos o instancias de variables privadas. La referencia de objeto volátil puede ser null.
public class MyRunnable implements Runnable { private volatile boolean active; public void run() { active = true; while (active) { // line 1 //Algunos códigos aquí } } public void stop() { active = false; // line 2 } }
A pesar de que declaramos el array como volatile, los elementos del array no tienen comportamiento volatile.
Para resolver este problema, Java proporciona dos clases, es decir, AtomicIntegerArray y AtomicLongArray, que representan arreglos con envolturas atómicas en (cada) variable, cuyos elementos se actualizan automáticamente.
Es decir, se puede acceder a los elementos de los arrays representados por estas clases como variables volátiles. Estas clases proporcionanget()
yset()
variables para recuperar o asignar valores a cada elemento.
Dado que los paquetes atómicos se pueden usar para tipos de datos enteros y long, y los demás tipos de datos están disponibles, se necesita reasignar el valor de la referencia del array cada vez que se asigna un elemento al array.
volatile int[] myArray = new int[3]; myArray [0] = 100; myArray = myArray; myArray [1] = 50; myArray = myArray; myArray [2] = 150; myArray = myArray;