fms*_*msf 26 java concurrency
读取和写入单个变量是原子的(语言保证!),除非变量的类型为long或double.
我正在读一个课程的幻灯片,我发现写了.这个类是关于并发的.
任何人都可以向我解释为什么写长或双不是原子操作?这让我感到惊讶.
Don*_*son 33
它不是原子的,因为它是机器代码级别的多步操作.也就是说,longs和double都比处理器的字长更长.
dav*_*veb 26
只是为了澄清Java的情况,除非声明它们,否则不会以原子方式读取或写入双精度数和长数 volatile
volatile
JLS - 双和长的非原子疗法
nap*_*ter 5
Java long 和 double 在 32 位机器中不是原子的,而是在带有一些 64 位 JVM 的 64 位机器中是原子的。为什么它依赖于机器位长度?因为 32 位机器需要两次写入 long(因为 long 是 64 位)。阅读本文了解详细信息。
归档时间:
16 年,10 月 前
查看次数:
9542 次
最近记录:
7 年,3 月 前