内容目录:


volatile在Java内存模型(JMM)中,保证共享变量对所有线程可见,但不保证原子性。volatile语义是同步,通过共享变量的方式,完成线程间的通信。

为什么需要volatile

Java内存模型中抽象、简化了计算机物理设备,分成工作内存和主内存,线程有各自的工作内存,却共享主内存。如果要把Java内存模型与物理设备映射起来的话,L1,L2 Cache可以视为工作内存,而L3 Cache视为主内存。线程执行指令时,会优先选择距离 CPU 较近的位置的工作内存中使用,而不会从读写速度较慢的主内存中,我称之为“就近原则”。当线程指令执行完后,赋值给工作内存,如果不回写到主内存,或者通知其他线程,其他线程是无法知晓变量已经修改,仍然会使用曾经缓存在工作内存中的变量,这就造成了缓存不一致的问题,Java使用volatile解决这种问题。volatile保证指令赋值完后的变量立即同步回主内存中,声明并通知其他线程当前赋值的变量已经失效,其他线程在下次使用时会放弃工作内存中变量,使用主内存中的变量。这样就完成了线程间对于volatile修饰的变量的通信。

延伸阅读

学习是年轻人改变自己的最好方式-Java培训,做最负责任的教育,学习改变命运,软件学习,再就业,大学生如何就业,帮大学生找到好工作,lphotoshop培训,电脑培训,电脑维修培训,移动软件开发培训,网站设计培训,网站建设培训学习是年轻人改变自己的最好方式