https://blog.csdn.net/m0_59408810/article/details/135959429

首先如果是局部变量,那么i++是线程安全。

 如果是全局变量,那么i++不是线程安全的。

理由:如果是局部变量,那么i++是线程安全:局部变量其他线程访问不到,所以根本不存在是否安全这个问题。

如果是全局变量,那么i++不是线程安全的:当它是全局变量时,所有线程都可以访问,所以,出现不安全性。

从更底层的角度讲,主要是因为i++这个操作不是原子性的,这个会编译成count = count +1; 所以会出现多线程访问冲突问题。volatile虽然可以保证多线程对修改可见,但代码中用到了 count++, 主要是count++不是原子性操作,这个会编译成count = count +1,其实是做了3个步骤,一个是读取,修改,写入 。所以会出现多线程访问冲突问题

解决方案:

1,加同步锁,比如使用synchronized关键字修饰,保证只有一个线程可以对主存变量进行操作

2,使用Atomic*类修饰来保证原子性。 ————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_59408810/article/details/135959429