Volatile
- 堆内存是唯一的,每一个线程都有自己的线程栈
- 每一个线程在使用堆里面变量的时候,都会拷贝一份到变量的副本中
- 在线程中,每一次使用时从变量的副本中获取的
问题
- 如果A线程修改了堆中共享变量的值,那么其他线程不一定及时使用最新的值。
解决
- 用使用volatile关键字修饰共享变量
- 强制线程每次在使用的时候,都会看一下共享区域最新的值
Synchronized同步代码块
- 1.线程获得锁
- 2.清空变量副本
- 3.拷贝共享变量最新的值到变量副本中
- 4.执行代码
- 5.将修改后变量副本中的值赋值给共享数据
- 6.释放锁