volatile的实现细节:
1.字节码层面
ACC_VOLATILE ,用字节码分析工具打开可以看到
2.JVM虚拟机层面(hotspot)
volatile内存区的读写都加屏障
3.os和硬件层面
根据操作系统,cpu等不同,实现方式也不同,有加内存屏障,也可使用lock..锁定内存块指令实现等等
synchronized的实现细节
1.字节码层面
ACC_SYNCHRONIZED
monitorenter monitorexit
2.JVM虚拟机层面(hostspot)
JVM由c和c++实现,在jvm层由c和c++调用了系统层面的同步机制
3.os和硬件层面
x86cpu中实现为使用了 lock comxchg xx 即类cas(俗称的自旋锁)来实现
根据系统和cpu不同,实现都是不一样的
拓展:现在java代码在Linux中运行,一般对应的一个java线程,对应一个Linux系统线程。