我有以下私人收藏:
final private ConcurrentHashMap<Book,BookLog> booklogMap;
我目前在构造函数中这样制作一个副本:
this.booklogMap = new ConcurrentHashMap<Book, BookLog>(booklogMap);
这是在构造函数中创建防御性副本的正确方法吗?如果不是,您如何正确制作线程安全集合的防御性副本?
最佳答案
this.booklogMap = new ConcurrentHashMap(booklogMap);
这是一个复制构造函数。几乎所有标准的Collection和Map实现都有一个,并且通常是克隆简单结构的最简单方法。只要Book和BookLog是不可变的,就可以正常工作。