Hilo volátil

 

1. Definición

Java 1 palabra clave / modificador en.

La garantía de ser volatilemodificado variable compartida de la visibilidad y ordenada , pero no lo hace la atomicidad de garantía

3. Descripción específica

A continuación, voy a explicar en detalle volatilecómo asegurar que "la variable compartida visibilidad y ordenada , pero no lo hace atomicidad garantía" de los principios específicos

Reserva de conocimiento: atomicidad, visibilidad y orden

 
 

3.1 Asegurar visibilidad

  • La descripción específica del
    volatileatributo modificado garantiza que el último valor se pueda leer cada vez que se lea. Pero no actualizará ni podrá actualizar el valor que se ha leído
  • Principio
    El valor del atributo compartido modificado por el subproceso A en la memoria de trabajo se actualizará inmediatamente en la memoria principal , y cada vez que el subproceso B / C / D lee y escribe el límite para lograr una lectura similar al valor del atributo directamente desde la memoria principal
  1. Es similar, algunas lecturas y escrituras en línea que las variables modificadas volátiles leen y escriben directamente en la memoria principal, esta afirmación es incorrecta, solo muestra un comportamiento similar
  2. La guía de lectura y escritura es una instrucción de la CPU; inserte una guía de lectura y escritura = le dice a la CPU y al compilador que debe ejecutarse antes de este comando, y luego ejecutarse después de este comando (ordenado)
  3. Otra función de la cerca de lectura-escritura es forzar una actualización de caché para diferentes CPU. Por ejemplo, una cerca de escritura actualizará los datos escritos antes de esta cerca en el caché para garantizar la visibilidad

3.2 Asegurar orden

  • Descripción detallada
    Al realizar operaciones de lectura / escritura en atributos modificados volátiles, el código anterior debe haberse ejecutado y el resultado es visible para las operaciones posteriores

  • Principio Al
    reordenar, volatileel código de operación de lectura / escritura que modifica el atributo es la línea divisoria . El código antes de la operación de lectura / escritura no se puede ordenar hacia atrás, y el mismo no se puede ordenar al frente. Ordenada

3.3 Sin garantía de atomicidad

  • Descripción detallada de
    volatilela atributo modificado si el valor leído en antes de la modificación, la modificación, no puede cambiar el valor del trabajo ha sido copiado en la memoria. Es decir, no puede evitar la concurrencia
  • Principio
// 变量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. Escenarios de aplicación.

  Debido a la volatilegarantía de visibilidad y orden, los volatileatributos compartidos modificados generalmente no tienen problemas en la lectura / escritura concurrente, lo que puede considerarse como una synchronizedimplementación ligera .

  Para obtener synchronizeduna explicación específica, consulte el artículo: Java: esta es una guía completa y detallada de aprendizaje de palabras clave sincronizadas

 

5. Resumen

  • En este artículo se explica Javala volatilepalabra clave, cuya función es asegurar la visibilidad y ordenación "variables compartidas , que se resumen en concreto de la siguiente manera:
 
 

Supongo que te gusta

Origin www.cnblogs.com/awkflf11/p/12676745.html
Recomendado
Clasificación