V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
guyeuro
V2EX  ›  问与答

Java : 64 位 JVM 下, long 和 double 是原子操作吗?

  •  
  •   guyeuro · 2017-09-01 16:23:22 +08:00 · 2784 次点击
    这是一个创建于 2644 天前的主题,其中的信息可能已经有所发展或是发生改变。

    64 位 JVM 下,long 和 double 是原子操作吗?

    5 条回复    2017-09-01 17:53:06 +08:00
    rwecho
        1
    rwecho  
       2017-09-01 17:21:20 +08:00
    原子操作是什么意思?

    i++ 在多线程的情况下不是原子操作. 需要做锁的处理
    你是说这个吗?
    guyeuro
        2
    guyeuro  
    OP
       2017-09-01 17:24:53 +08:00
    @rwecho

    set get i++
    watzds
        3
    watzds  
       2017-09-01 17:48:40 +08:00 via Android
    据说不一定,反正想要原子就加 volatile
    skyleft
        4
    skyleft  
       2017-09-01 17:49:25 +08:00
    32 和 64 都不保证是
    要加 volatile 才是
    skyleft
        5
    skyleft  
       2017-09-01 17:53:06 +08:00   ❤️ 1
    之所以是不一定 是因为不同的 jvm 有不同的实现 用的最多的 sun hotspot 应该不保证这点
    但是 oracle 鼓励在 64 位架构上 jvm 对 long 和 double 的 write 一次完成

    具体参考 http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6058 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:41 · PVG 10:41 · LAX 18:41 · JFK 21:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.