HashMap深拷贝浅拷贝的问题

Thread t1 =new Thread( () -> {

map.put("a",new AtomicLong(0));

            for (int i =0;i<100000;i++){

map.get("a").incrementAndGet();

            }

});

        t1.start();

        Thread t2 =new Thread( () -> {

Map copyMap =new HashMap<>();

            copyMap.putAll(map);

          while (true){

for(Map.Entry entry : copyMap.entrySet()){

System.out.println(entry.getValue());

              }

}

});

        t2.start();


以上代码中,虽然copymap对我们的静态map值进行了一次putall,(map是静态的ConcurrentHashMap<String,AtomicLong>类型),但是随着t1线程中map中的value不断变化,即使我们只对进行了一次复制的局部变量copymap进行遍历输出,里面的值也是在不断变化的。最后将AtomicLong类型换成了Long类型,就解决了这个问题。至于原因没有找出来,也许可以理解一下对象的深浅拷贝。

Map拷贝 关于对象深拷贝 浅拷贝的问题 - chenxiangxiang - 博客园

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 线程 操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有...
    go以恒阅读 5,627评论 0 6
  • 第十天 权限修饰符 public protected default private 同一类 true true ...
    炙冰阅读 3,579评论 0 1
  • 本系列出于AWeiLoveAndroid的分享,在此感谢,再结合自身经验查漏补缺,完善答案。以成系统。 Java基...
    济公大将阅读 5,418评论 1 6
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 5,431评论 0 3
  • 这是一篇英文阅读理解题,很有意义,现翻译如下。 有一个盲人,来到街上乞讨。他请人帮他写一块牌子,上面写道:“我的眼...
    洛村阅读 4,882评论 1 11

友情链接更多精彩内容