violate i=0 ,i 的值不确定,因为 i++ 操作是非原子性

自增操作 i++ 实际上包含三步:

  1. 读取 i 的值。
  2. i 的值加 1。
  3. 将新值写回 i

AtomicInteger 得到的值是 3,AtomicInteger 原理是 CAS

参考

https://www.cnblogs.com/dc5e/p/11140435.html