i++ 和 i– 操作是否具备原子性?为什么?
除了 long 和 double,其他的基本数据类型的读取和赋值操作都是原子性的。
int x = 100;
int y = x;
x++;
x = x + 1;
只有语句1是原子性的,其他的3个语句都不是原子性操作,因为它们都包含两个及以上的操作,它们都先要去读取《变量的值,再将计算后 x 的新值写入到主内存中,几个操作合起来就不是原子性操作了。
除了 long 和 double,其他的基本数据类型的读取和赋值操作都是原子性的。
int x = 100;
int y = x;
x++;
x = x + 1;
只有语句1是原子性的,其他的3个语句都不是原子性操作,因为它们都包含两个及以上的操作,它们都先要去读取《变量的值,再将计算后 x 的新值写入到主内存中,几个操作合起来就不是原子性操作了。