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

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

你可能感兴趣的:(HashMap深拷贝浅拷贝的问题)