java 内存模型
1 平台的内存模型
在共享内存的多处理器体系架构中,每个处理器都拥有自己的缓存,并且定期的与主内存进行协调。
串行一致性:程序只存在唯一的执行顺序,而不考虑这些操作在何种处理器上执行,并且在每次读取变量时,都能获取执行序列中(任何处理器)最近一次写入该变量的值。
在现代支持共享内存的多处理器中,当跨线程共享数据时,会出现奇怪的情况,在java中需要使用适当的同步方法。在底层是使用内存栅栏来实现。
2 Happens-Before 规则
程序顺序规则:如果程序中 操作A 在操作B 之前,那么线程中 操作A 将在 操作B 之前执行。
监视器锁规则:在监视器锁上的解锁操作必须在同一个监视器锁上的加锁操作之前执行。
volatile 变量:对 volatile 变量的写入操作必须在对该变量的读操作之前执行
线程启动规则:在线程上对 Thread.Start 的调用必须在该线程中执行任何操作之前执行。
线程结束规则:线程中的任何操作都必须在其他线程检测到该线程已经结束之前执行,或者从 Thread.Join 中返回,或者调用 Thread.isAlive 时返回false
传递性:如果 操作A 在 操作B 之前,并且 操作B 在 操作C 之前执行,那么 操作A 必须在 操作C 之前执行。
3 在 java 内存模型中, final 域能确保初始化过程的安全性,从而可以不受限制的访问不可变对象。
学习过程中,难免出错。如果您在阅读过程中遇到不太明白,或者有疑问。欢迎指正...联系邮箱crazyCodeLove@163.com
如果觉得有用,想赞助一下请移步赞助页面:赞助一下