不安全的sun类实现

时间:2012-03-31 13:02:27

标签: 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);

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

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

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

是的,compareAndSwapObject调用转换为本机方法调用或使用本机硬件工具进行比较和交换的内联扩展。

关于synchronized关键字的实现,可以使用任意数量的技术,但它们在概念上都类似于比较和交换。

答案 2 :(得分:1)

您问题的确切答案取决于实现。

请参阅此处了解原子包文档:http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/atomic/package-summary.html

实现通常使用机器级原子指令,如比较和交换。

答案 3 :(得分:0)

您可能需要了解一下英特尔为其x86处理器系列提供的产品。

Implementing scalable atomic locks for multi core intel em64t and ia32 architectures.