我正在查看Java的
AtomicInteger
类的源代码(在此处找到),以了解实现JVM所需的原子操作。我注意到他们使用未记录的Unsafe
API来实现其原子整数操作,而他们仅使用的两个原语似乎是compare and swap
和compare and set
操作。而且,Unsafe类将这些指令实现为本机方法,这使我相信他们正在使用在一般情况下执行这些基本操作的本机指令。然而,并非每个处理器(尽管大多数现代处理器都支持)都有支持这些原语的指令集。即使没有本机处理器支持,这些原语也可以由VM以确保与其他VM线程的原子性的方式实现,但不一定能确保与其他本机线程的原子性。那么,Java是否需要这些原语在本机架构上才能拥有有效的JVM,从而所有JVM实现都将支持与本机线程的原子性,还是Java中的原子性仅在Java线程之间得到保证?