原子性操作

关于Java自增操作的原子性分析

旧街凉风 提交于 2019-12-17 13:00:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 刚接触编程的时候写的是C/C++,转java后,一直都认为java自增操作是原子性的操作,昨天看到一篇关于ArrayList多线程不安全的文章,里边有个Demo,发现新增操作(add)次数和List的size怎么也对不上,按照自增是原子性操作的话是应该不会出现这个问题的,但现实确实是残酷的。几经查看ArrayList的源码,都没有发现问题,于是终于怀疑到自增操作上,经验证:Java自增操作并非原子性操作。证明如下: 1、测试代码 package com.hjr.back16.common.util; import static java.lang.System.out; /** * 自增操作原子性测试 * @author scuechjr * @date 2016-4-24 1:29:48 */ public class IncrementTestDemo { public static int count = 0; public static Counter counter = new Counter(); public static void main(String[] args) { for (int i = 0; i < 10; i++) { new Thread() { public void run