Java并发编程系列之三:Java内存模型

本文详细阐述了Java内存模型中的并发编程三大特性——原子性、可见性和有序性,以及volatile关键字的作用。同时提供面试准备资源,包括高清脑图和面试问题解析。
  • Java内存模型

  • 总结

一、并发编程三大特性说明


1、原子性

所谓原子性操作,就是类似数据库的事务操作,对应的一个操作或者多个操作,要么全部完成,要么全都失败。所有的操作不会被外界因素打断。

2、可见性

所谓可见性特性,就是当多个线程访问同一个变量时,如果一个线程修改了该值。其他线程也可以立马看到被修改后的变量的值。Javavolatile关键字保证了变量的可见性。当变量被volatile关键字修饰后,只要有线程修改了该变量值时,修改后的值会被立即刷新到主存中。其他线程进行共享变量读取时,会从主存中进行数据读取。如下图所示:

在这里插入图片描述

3、有序性

所谓有序性,是指在操作系统中程序的执行顺序和编写的代码的顺序是一致的。但是在Java内存模型中,为了提升运行效率是允许编译器和处理器对指令进行重排序的,但是不影响单线程运行的最终结果。

二、volatile关键字说明


volatile关键字可以保证多线程环境下的变量可见性,但是无法保证多线程操作的原子性。当volatile关键字修饰共享变量进行写操作时,在其对应的汇编代码中会存在以Lock为前缀的指令信息,改指令会促使处理器将缓存回写到内存中,所以说该变量具有以下两种特性:

(1)变量具备可见性特征,当一个线程对其进行修改后,其他线程可以读到期修改后的值,也就是说它会告诉编译器,对修饰变量的读写不实用CPU的缓存,而是在主存中进行读取和写入;

(2)禁止进行指令重排序;

所谓指令重排序,就是计算机为了提高系统的执行效率,会对计算机指令进行重排序的操作:

a、编译器重排序,即编译器在不改变单线程的程序予以的情况下,重新编排程序语句的执行顺序;

b、处理器重排序,如果程序代码中对于数据的前后依赖不敏感,处理器可以改变程序语句对应的机器码的执行顺序。

最后

给大家送一个小福利

附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。

准备面试跳槽、自身职业规划迷茫的朋友们。

[外链图片转存中…(img-2Bk02HZc-1714366544145)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值