多线程中如果两个线程同时使用第三方的共享数据,并且进行修改的话,那么就有可能出现数据更新不及时的问题原因是:
假设线程A和线程B共享第三方数据count:
线程A和线程B中都会开辟一段用来保存count值得变量副本,因为这样执行更快:
线程每次修改值都会:
- 先将副本中的值修改
- 然后赋值给副本
- 最后更新共享数据中的值
所以在多线程的操作中,当A线程修改了共享数据时,B线程没有及时获取到最新的值,如果还在使用原先的值,就会出现问题 ,共享数据如果不做处理则会出现共享数据值更新缓慢的错误
而volatile关键字的作用是:
强制线程在每次使用被volatile关键字修饰的共享变量时,都会看一下共享数据的最新值。
(但是volatile关键字不能保证原子性)