volatile提供了一种轻量级的同步机制,专注于确保共享变量的实时可见性,而不像synchronized和Lock那样提供全面的锁管理。综上所述,volatile关键字在Java并发编程中主要用于确保内存可见性和防止指令重排序,但在需要原子性操作的场景下,需要借助更强大的同步工具。
一、内存可见性 基于缓存一致性协议,当用volatile关键字修饰的变量改动时,cpu会通知其他线程,缓存已被修改,需要更新缓存。这样每个线程都能获取到最新的变量值。二、基于内存屏障的防止指令重排 用volatile修饰的变量,可以防止cpu指令重排序。底层的实现方式是基于4种内存屏障:读读、读写、写读、读读...
0x000000010d3f3203: lock addl $0x0,(%rsp) ;*putstatic flag ; - com.java.study.VolatileStudy::lambda$main$1@9 (line 31)也就是到CPU的底层执行的命令其实就是这个lock,这个lock指令既完成了变量的可见性还保证了禁止指令充排序:LOCK用于在多处理器中执行指令时对共享内存的独占使用。它的作用是能够...
在学习Java的三个多月里,除了吃饭睡觉工作,剩余的时间都在学习,因为我知道自己的计算机基础不是很好,也没有学过什么计算机,只是学了些Java基础,相对于那些科班的人来说我要比他们付出更多的努力。我只能咬紧牙关,坚持下去,我不能放弃,我要完成我的梦想,我要让我的家人过上好日子。终于三个...