-
Java内存模型
-
总结
1、原子性
所谓原子性操作,就是类似数据库的事务操作,对应的一个操作或者多个操作,要么全部完成,要么全都失败。所有的操作不会被外界因素打断。
2、可见性
所谓可见性特性,就是当多个线程访问同一个变量时,如果一个线程修改了该值。其他线程也可以立马看到被修改后的变量的值。Java中volatile关键字保证了变量的可见性。当变量被volatile关键字修饰后,只要有线程修改了该变量值时,修改后的值会被立即刷新到主存中。其他线程进行共享变量读取时,会从主存中进行数据读取。如下图所示:

3、有序性
所谓有序性,是指在操作系统中程序的执行顺序和编写的代码的顺序是一致的。但是在Java内存模型中,为了提升运行效率是允许编译器和处理器对指令进行重排序的,但是不影响单线程运行的最终结果。
volatile关键字可以保证多线程环境下的变量可见性,但是无法保证多线程操作的原子性。当volatile关键字修饰共享变量进行写操作时,在其对应的汇编代码中会存在以Lock为前缀的指令信息,改指令会促使处理器将缓存回写到内存中,所以说该变量具有以下两种特性:
(1)变量具备可见性特征,当一个线程对其进行修改后,其他线程可以读到期修改后的值,也就是说它会告诉编译器,对修饰变量的读写不实用CPU的缓存,而是在主存中进行读取和写入;
(2)禁止进行指令重排序;
所谓指令重排序,就是计算机为了提高系统的执行效率,会对计算机指令进行重排序的操作:
a、编译器重排序,即编译器在不改变单线程的程序予以的情况下,重新编排程序语句的执行顺序;
b、处理器重排序,如果程序代码中对于数据的前后依赖不敏感,处理器可以改变程序语句对应的机器码的执行顺序。
最后
给大家送一个小福利

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

准备面试跳槽、自身职业规划迷茫的朋友们。
[外链图片转存中…(img-2Bk02HZc-1714366544145)]
本文详细阐述了Java内存模型中的并发编程三大特性——原子性、可见性和有序性,以及volatile关键字的作用。同时提供面试准备资源,包括高清脑图和面试问题解析。

被折叠的 条评论
为什么被折叠?



