不安全的sun类实现

5 java virtual-machine

/**
     * Atomically update Java variable to <tt>x</tt> if it is currently
     * holding <tt>expected</tt>.
     * @return <tt>true</tt> if successful
     */
    public final native boolean compareAndSwapObject(Object o, long offset,
                                                     Object expected,
                                                     Object x);
Run Code Online (Sandbox Code Playgroud)

1)如果"value == expected",他们如何"原子地"将位置"offset"的"o"值设置为"x"?

2)当我们使用synchronized方法或synchronized块时,它们如何"锁定"对象?我很想知道引擎盖下的内容.

Kon*_*uda 4

  1. 由于这是本机方法,因此它们将回退到目标平台提供的任何方法。IIRC,“比较和交换”在 10 多年前就作为处理器命令出现在 MIPS 和 SPARC 上。

  2. 他们在幕后使用类似 1 的东西来获取对象的锁定