关于AtomicInteger

AtomicInteger

JAVA原子操作的Interger类, 主要为解决多线程线程安全问题,今天拿来测试一下,测试代码如下:

public static void main(String[] args) {
        Set<Integer> set = new HashSet<>();
        AtomicInteger ai = new AtomicInteger(0);
        ExecutorService es = Executors.newCachedThreadPool();
        
        for (int i=0; i<2000000; i++){
            es.submit(() -> {
                set.add(ai.getAndIncrement());
            });
        }
        
        es.shutdown();
        System.out.println(set.size());
    }

运行结果显示并不是2000000.
那么我的结论是: 说明生成的值是有重复的.
为什么会这样呢?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,682评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 什么叫远方 我有些迷茫 远方是不是就要远离家乡 还是到不了的地方才叫远方 这个话题 总是让我没有方向 远方到底有多...
    微雨凭栏阅读 208评论 2 4
  • 上次卸载是因为APP总是打不开,索性就清理掉了。大概一年后,为了要和京东图书比价,又重新下载,但也没在当当上面买,...
    Mr__Pan阅读 388评论 0 1
  • 看这部电影,是因为电影的名字吸引了我。为什么叫所罗门的伪证呢?这部电影跟所罗门有关系吗?在文末我们再行分析。 很少...
    孟琳漫步人生路阅读 2,224评论 2 3