esolve
V2EX  ›  问与答

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

  •  
  •   esolve · Mar 1, 2018 · 1511 views
    This topic created in 3020 days ago, the information mentioned may be changed or developed.

    譬如 JAVA 里 ConcurrentHashMap 的 putIfAbsent 方法

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

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

    honeycomb
        1
    honeycomb  
       Mar 1, 2018 via Android
    看源码。

    Java8 的 concurrenthashmap 的 put 和 putifabsent 都是用了 putval,而 putval 涉及到 onlyifabsent 的地方是给 Node 上锁的,谁抢到这个锁谁上。
    honeycomb
        2
    honeycomb  
       Mar 1, 2018 via Android
    空 bin 的时候应该是靠前面的 castabat,也是调用 cas 操作:unsafe.compareandswapobject
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6138 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 03:07 · PVG 11:07 · LAX 20:07 · JFK 23:07
    ♥ Do have faith in what you're doing.