通俗易懂的Java内存模型与Volatile详解

本文详细讲解了Java内存模型,包括主内存与工作内存的交互操作,以及内存模型的原子性、可见性和有序性。接着深入探讨了volatile关键字,解释了它如何保证可见性和有序性,但不保证原子性。最后对比了volatile和synchronized的区别。
摘要由CSDN通过智能技术生成

一、Java 内存模型

    Java 内存模型试图屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。
(一)主内存与工作内存
在这里插入图片描述
    处理器上的寄存器的读写的速度比内存快几个数量级,为了解决这种速度矛盾,在它们之间加入了高速缓存
    加入高速缓存带来了一个新的问题:缓存一致性。如果多个缓存共享同一块主内存区域,那么多个缓存的数据可能会不一致,需要一些协议来解决这个问题。

    所有的变量都存储在主内存中,每个线程还有自己的工作内存,工作内存存储在高速缓存或者寄存器中,保存了该线程使用的变量的主内存副本拷贝
    线程只能直接操作工作内存中的变量,不同线程之间的变量值传递需要通过主内存来完成。

(二)内存间交互操作
    Java 内存模型定义了 8 个操作来完成主内存和工作内存的交互操作。
1、lock(锁定):作用于主内存中的变量,它把一个变量标识为一个线程独占的状态;
2、unlock(解锁):作用于主内存中的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定
3、read(读取&#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值