1、堆内存是唯一的,每一个线程有自己的线程栈;
2、每一个线程在使用堆内存中的变量时,会拷贝一份变量副本,然后使用变量副本,这样运行的会更快一点;
3、在线程中,每一次使用都是从变量的副本中获取。
综上所述,在线程运行时可能会出现问题:如果A线程修改了堆中的共享变量的值,那么其它线程不一定能及时使用最新的值。
volatile就可以解决这个问题,volatile的作用就是强制线程每次执行时,都会看一下共享变量的最新值
使用方式:在变量的数据类型前面添加volatile关键字即可:public static volatile int count = 10;
使用同步代码块也可以解决这个问题:
synchronized同步代码块:
1、线程获得锁
2、清空变量副本
3、拷贝共享变量最新值到变量副本
4、执行代码
5、将修改后的变量副本的值赋给共享变量
6、释放锁