Revisión de Java: atomicidad, visibilidad, orden

Atomicidad

Atomicidad: Una o varias operaciones no se ejecutan, o todas se ejecutan y el proceso de ejecución no se interrumpe por ningún factor.

Un ejemplo simple es la transferencia con tarjeta bancaria, las transferencias A a B, entonces el proceso de deducir dinero de A y agregar dinero a B debe ser atómico. Si no es atómico, entonces habrá problemas.

Visibilidad

Visibilidad: cuando varios subprocesos acceden a la misma variable, siempre que un subproceso modifique el valor de esta variable, otros subprocesos deberían poder verla inmediatamente.

Orden

Orden: es decir, el orden de ejecución del programa se ejecuta en el orden del código.

Para mejorar la eficiencia del programa, la JVM puede reorganizar el código de entrada, es decir, el orden en el que se ejecuta la máquina virtual no es necesariamente el orden del código que escribió. Aunque reorganizará las instrucciones, se asegurará de que los resultados de la ejecución de su programa sean los mismos que los resultados de la ejecución del código. Pero el reordenamiento de las instrucciones solo puede garantizar que un solo subproceso ejecute el mismo resultado, una vez que involucre varios subprocesos.

//线程1:
context = loadContext();   //语句1
inited = true;             //语句2
 
//线程2:
while(!inited ){
    
    
  sleep()
}
doSomethingwithconfig(context);

如果线程1先执行了语句2,这时线程2会跳出循环,但是这时的context可能为null。

Cómo garantizar las tres características anteriores

Atomicidad

Para operaciones simples, se puede garantizar la atomicidad:

x = 10;         //语句1,原子性,直接赋值
y = x;         //语句2,无原子性,先取出x的值,再赋给y
x++;           //语句3,无原子性,与上同理
x = x + 1;     //语句4,无原子性,与上同理

Para garantizar un rango más amplio de atomicidad, puede usar bloqueos (sincronizados y bloqueados)

Visibilidad

palabra clave volátil. Al modificar una variable, se puede garantizar que el valor modificado de la variable se pueda actualizar inmediatamente a la memoria principal para que otros subprocesos lo lean.

También se puede garantizar la sincronización y el bloqueo, el principio es que solo un hilo puede acceder al bloque de código y a las variables al mismo tiempo.

Orden

Volatile puede garantizar un cierto grado de orden, sincronizados y bloqueados pueden garantizar el orden, el código que bloquean solo puede ser accedido por un hilo a la vez, y otros hilos no pueden acceder a él. Un cierto significado también garantiza el orden.

Supongo que te gusta

Origin blog.csdn.net/why1092576787/article/details/114702965
Recomendado
Clasificación