非原子处理double和long

出于Java编程语言存储器模型的目的,对非易失性long或 double的单个写入被视为两个单独的写入:每个32位半写一个。这可能导致线程从一次写入看到64位值的前32位,而从另一次写入看到第二次32位的情况。

volatile longdoublevalues的写入和读取 始终是原子的。

无论是否将它们实现为32位或64位值,对引用的写入和读取始终是原子的。

某些实现可能会发现将64位上的单个写操作longdouble值划分为相邻32位值上的两个写操作很方便为了效率,这种行为是特定于实现的; Java虚拟机的实现可以自由地或原子地或分两部分执行写入longdouble值。

鼓励Java虚拟机的实现避免在可能的情况下拆分64位值。鼓励程序员将共享的64位值声明为volatile或正确同步其程序以避免可能的复杂情况。

posted @ 2019-04-04 10:20  你过来啊  阅读(233)  评论(0编辑  收藏  举报