S E*_*S E 6 java multithreading jvm atomic native-code
我正在查看AtomicInteger类的Java源代码(在此处找到),以查看实现JVM所需的原子基元.我注意到他们使用未记录的UnsafeAPI来实现他们的原子整数操作,并且他们使用的唯一两个原语似乎是compare and swap和compare and set操作.而Unsafe类将这些指令实现为本机方法,这使我相信它们正在使用在一般情况下执行这些原始操作的本机指令.然而,并非每个处理器(尽管大多数现代处理器都有)具有本地支持这些原语的指令集.现在,即使没有本机处理器支持,这些原语也可以由VM实现,以保证与其他VM线程的原子性,但不一定与其他本机线程一致.那么java是否要求本机架构上的这些原语具有有效的JVM,因此所有JVM实现都支持本机线程的原子性,或者java中的原子性只保证在java线程之间?
JNI 不提供任何方法让本机线程获取 Java 变量的地址。对变量的所有访问,无论是来自 Java 字节码还是来自本机线程,都必须通过 JVM 机器。所以你的问题确实没有实际意义。
Java 原子性“需要相对于 JVM 的原子性”,而“相对于 JVM”是唯一重要的情况。
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |