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

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

  •  
  •   esolve · 2018 年 3 月 1 日 · 1397 次点击
    这是一个创建于 2964 天前的主题,其中的信息可能已经有所发展或是发生改变。

    譬如 JAVA 里 ConcurrentHashMap 的 putIfAbsent 方法

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

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

    honeycomb
        1
    honeycomb  
       2018 年 3 月 1 日 via Android
    看源码。

    Java8 的 concurrenthashmap 的 put 和 putifabsent 都是用了 putval,而 putval 涉及到 onlyifabsent 的地方是给 Node 上锁的,谁抢到这个锁谁上。
    honeycomb
        2
    honeycomb  
       2018 年 3 月 1 日 via Android
    空 bin 的时候应该是靠前面的 castabat,也是调用 cas 操作:unsafe.compareandswapobject
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2930 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:16 · PVG 17:16 · LAX 02:16 · JFK 05:16
    ♥ Do have faith in what you're doing.