esolve
V2EX  ›  问与答

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

  •  
  •   esolve · Mar 1, 2018 · 1673 views
    This topic created in 3108 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   ·   Privacy   ·   Solana   ·   5289 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 07:50 · PVG 15:50 · LAX 00:50 · JFK 03:50
    ♥ Do have faith in what you're doing.