Java内存模型之可见性分析

本文深入解析Java内存模型(JMM),探讨数据共享与竞争带来的并发问题,以及如何通过JMM保证数据的可见性。分析了线程的工作内存、主内存交互,提出volatile、synchronized等解决方案,防止重排序导致的不一致性。
摘要由CSDN通过智能技术生成
1. JMM模型描述
  • 给定程序以及一个检测程序是否合法的执行跟踪,JMM工作原理是检查执行跟踪中的每个读,并根据某些规则检查读观察到的写是否有效
  • JMM中可能产生的行为表象现为不论代码是如何实现程序行为,只要保证程序的所有结果执行和JMM预期的结果一致即可
  • 基于上述的第二点,对实现者执行的代码进行转换的实现就比较自由,可以实现操作的重排序甚至删除不必要的同步操作代码
2. JMM之数据共享与竞争

线程共享与独占区域

  • 线程共享区域: JVM运行数据区中的方法区,堆内存存储的数据变量,存在数据竞争,即数据读写的安全问题
  • 线程独占区域: JVM为每个线程单独创建的私有区域,用于存储当前线程私有的数据变量,不存在数据竞争,比如线程局部变量,ThreadLocal/ThreadLocalRandom等
    在这里插入图片描述

线程通信产生数据竞争

  • 简要的源代码
// constant.java
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疾风先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值