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

Java :多核 CPU 多线程下,原子操作有先后顺序吗?

  •  
  •   esolve · 2018-03-01 11:12:54 +08:00 · 1091 次点击
    这是一个创建于 2464 天前的主题,其中的信息可能已经有所发展或是发生改变。

    譬如 JAVA 里 ConcurrentHashMap 的 putIfAbsent 方法

    两个线程同时调用这个方法 putIfAbsent ( key1,value1 )

    他们之间会有先后顺序吗?不会两个都成功吧?

    honeycomb
        1
    honeycomb  
       2018-03-01 15:07:11 +08:00 via Android
    看源码。

    Java8 的 concurrenthashmap 的 put 和 putifabsent 都是用了 putval,而 putval 涉及到 onlyifabsent 的地方是给 Node 上锁的,谁抢到这个锁谁上。
    honeycomb
        2
    honeycomb  
       2018-03-01 15:15:37 +08:00 via Android
    空 bin 的时候应该是靠前面的 castabat,也是调用 cas 操作:unsafe.compareandswapobject
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3111 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:45 · PVG 21:45 · LAX 05:45 · JFK 08:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.