浅谈java内存模型

1,什么是jmm?
jmm定义了一个线程对另一个线程的可见性
jmm决定一个线程对共享变量的写入时,能对另一个线程可见
2,jmm解决了什么问题?
在多线程编程中,每个线程都有自己的内存(称为本地内存),共享变量存放在主内存中,当有多个线程同时操作一个变量时,可能因为线程没有及时刷新本地内存的数据到主内存,会有线程安全问题
jmm通过控制主内存和每个线程本地内存的交互,来为java程序员提供内存可见性保证
3, 什么时候刷新本地内存的数据到主内存?
什么时候最新的值会被刷新至主内存中是不太确定的。但是有两种方法可以保证数据及时刷新
1,关键字volatile:一旦某个线程修改了该被volatile修饰的变量,它会保证修改的值 会立即被更新到主存,当有其他线程需要读取时,可以立即获取修改之后的值。
2,关键字synchronized:synchronized关键字能够保证同一时刻只有一个线程获得锁,然后执行同步方法,并且还会确保在锁释放之前,会将对变量的修改刷新到主内存当中。
4,模型解析
在这里插入图片描述假设主内存中有一个共享变量x
如上图所示,本地内存A和B有主内存中共享变量x的副本。假设初始时,这三个内存中的x值都为0。线程A在执行时,把更新后的x值(假设值为1)临时存放在自己的本地内存A中。当线程A和线程B需要通信时,线程A首先会把自己本地内存中修改后的x值刷新到主内存中,此时主内存中的x值变为了1。随后,线程B到主内存中去读取线程A更新后的x值,此时线程B的本地内存的x值也变为了1。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值