i++问题

Posted wangchao1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了i++问题相关的知识,希望对你有一定的参考价值。

i++操作也可分为三个步骤:读i的值,进行i+1,设置i的值。
如果两个线程同时对i进行i++操作,会出现如下情况

  1. i设置值为0
  2. 线程A读到i的值为0
  3. 线程B也读到i的值为0
  4. 线程A执行了+1操作,将结果值1写入到内存
  5. 线程B执行了+1操作,将结果值1写入到内存
  6. 此时i进行了两次i++操作,但是结果却为1

在多线程环境下有什么方式可以避免这类情况发生?
解决方式有很多种,例如用AtomicInteger、CAS、synchronized等等。

 

参考:https://juejin.im/post/5b737b9b518825613d3894f4

以上是关于i++问题的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段的算法复杂度

vs 2010代码片段

vs 2010代码片段

需要对特定 R 代码片段的解释

js 常用代码片段

JavaScript实用功能代码片段