i++
操作可分为三个步骤:读i的值,进行i+1,设置i的值。
如果两个线程同时对i进行i++操作,会出现如下情况
- i设置值为0
- 线程A读到i的值为0
- 线程B也读到i的值为0
- 线程A执行了+1操作,将结果值1写入到内存
- 线程B执行了+1操作,将结果值1写入到内存
- 此时i进行了两次i++操作,但是结果却为1
在多线程环境下有什么方式可以避免这类情况发生?
解决方式有很多种,例如用AtomicInteger、CAS、synchronized等等。
wangchao1995 2020-05-31 18:36 原文
i++
操作可分为三个步骤:读i的值,进行i+1,设置i的值。
如果两个线程同时对i进行i++操作,会出现如下情况
在多线程环境下有什么方式可以避免这类情况发生?
解决方式有很多种,例如用AtomicInteger、CAS、synchronized等等。