Java多线程知识点汇总

happens-before原则的本质是什么?

happens-before是对Java内存模型的进一步抽象,通过几条简洁明了的规律屏蔽了Java内存模型的实现细节。在满足条件的情况下,保证了一个线程的操作是对另一个线程实时可见的,或是保证某些操作一定不会发生指令重排。

volatile的两个语义(禁止指令重排、保证线程间内存可见性)在Java内存模型、CPU层面是如何实现的

Java内存模型中:保证对volatile修饰变量的操作有序性,volatile修饰的变量不会被指令重排优化。
在Java内存模型中每次使用volatile修饰变量前都必须先从主内存刷新最新的值;每次修改volatile修饰变量后必须立刻同步回主内存。
在CPU层面:对volatile修饰的变量赋值后,会多执行一个内存屏障操作。指令重排时,不能把后面的指令重排序到内存屏障前的位置。还会将本处理器的缓存写入内存,引起别的处理器无效化其缓存。

Java内存模型的作用是什么

屏蔽硬件和操作系统的内存访问差异,让Java程序在各种平台都能达到一致的内存方位效果。

synchronized保证线程间内存可见性的原理是什么?和volatile一样吗

待补充

多线程有序性受哪些因素影响?

线程内的指令重排;线程工作内存和主内存的非实时同步。

你可能感兴趣的:(java,jvm,开发语言)