变量在进行引用时,原本需要从保存在内存中的内容进行拷贝,引用完或修改完后再重新赋值回原本的变量
但是这样会导致在有些时候,多线程条件下, 出现在未返回修改后的结果到原本的变量中,则对原始的变量进行引用,
则会出现数据的不一致性。
volatile 只能保证变量在进行引用时,直接引用原本的变量,不经过副本拷贝的操作。这样就数据的一致性,
但是在多线程条件下,单纯的保证数据的一致性还不够,因为多个线程会在同一时刻对同一个变量引用进行多次的获取,
如果对该变量进行修改操作,则会导致数据不同步。
A 抢了第 99 张票! // A C线程在同一时刻对同一个变量引用进行多次的获取
C 抢了第 99 张票! // 但是volatile会直接将这个变量的修改进行直接修改,
B 抢了第 101 张票! // 所以多线程修改该变量后,会得到两次相加后的结果,
// 但是因为不加volatile, 拷贝副本的速度也很快,导致效果和加了volatile差不多
// 但是只怕万一会出现极端情况,所以加volatile是万无一失的做法
package com.jun.music;
public class VolatileTest {
public static void main(String[