美文网首页
HashMap深拷贝浅拷贝的问题

HashMap深拷贝浅拷贝的问题

作者: 林太浪先生 | 来源:发表于2020-04-03 10:12 被阅读0次

    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 - 博客园

    相关文章

      网友评论

          本文标题:HashMap深拷贝浅拷贝的问题

          本文链接:https://www.haomeiwen.com/subject/adsxphtx.html