【多线程与高并发】JMM内存模型 基础

JMM

什么是JMM

JMM是Java内存模型,不同的硬件生产商家和不同的操作系统下,内存的访问有一定的差异,java内存模型屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到一致的并发效果。

Java内存模型规定所有的变量都存储在主内存中,包括实例变量,静态变量,但是不包括局部变量和方法参数。每个线程都有自己的工作内存,线程的工作内存保存了该线程用到的变量和主内存的副本拷贝,线程对变量的操作都在工作内存中进行线程不能直接读写主内存中的变量

不同的线程之间也无法访问对方工作内存中的变量。线程之间变量值的传递均需要通过主内存来完成。

img

每个线程的工作内存都是独立的,线程操作数据只能在工作内存中进行,然后刷回到主存。这是 Java 内存模型定义的线程基本工作方式。

Java内存模型所带来的问题

  • 可见性问题

    CPU中运行的线程从主存中拷贝共享数据到它的本地内存,并在之后对这个变量在本地内存中做出了更改,但这个变更对运行在其他CPU中的线程是不可见地,因为这个更改还没有flush到主存中:要解决共享对象可见性这个问题,我们可以使用volatile关键字或者是加锁。

  • 竞争现象

    线程A和线程B共享一个对象obj。假设线程A从主存读取Obj.count变量到自己的本地内存中,同时

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值