1、堆内存是唯一的,每一个线程有自己的线程栈;

2、每一个线程在使用堆内存中的变量时,会拷贝一份变量副本,然后使用变量副本,这样运行的会更快一点;

3、在线程中,每一次使用都是从变量的副本中获取。

综上所述,在线程运行时可能会出现问题:如果A线程修改了堆中的共享变量的值,那么其它线程不一定能及时使用最新的值。

volatile就可以解决这个问题,volatile的作用就是强制线程每次执行时,都会看一下共享变量的最新值

使用方式:在变量的数据类型前面添加volatile关键字即可:public static volatile int count = 10;

使用同步代码块也可以解决这个问题:

synchronized同步代码块:

1、线程获得锁

2、清空变量副本

3、拷贝共享变量最新值到变量副本

4、执行代码

5、将修改后的变量副本的值赋给共享变量

6、释放锁