java - 在构造函数中创建防御副本的正确方法是什么

标签 java multithreading

我有以下私有(private) Collection :

final private ConcurrentHashMap<Book,BookLog> booklogMap;

我目前在构造函数中像这样复制:

this.booklogMap = new ConcurrentHashMap<Book, BookLog>(booklogMap);

这是在构造函数中创建防御副本的正确方法吗?如果不是,您如何正确制作线程安全集合的防御性副本?

最佳答案

this.booklogMap = new ConcurrentHashMap(booklogMap);

这是一个复制构造函数。几乎所有标准的 Collection 和 Map 实现都有一个,它通常是克隆简单结构的最简单方法。只要 Book 和 BookLog 是不可变的,这就可以正常工作。

关于java - 在构造函数中创建防御副本的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35346335/

相关文章:

java - 从错误的线程异常调用

swift - GoogleWebRTC 挂起(卡住)swift native 应用程序(OpenVidu)中的主线程

c - 如何为指定的子进程分配一个CPU?

java - Spring Boot - 基于其他属性自动配置属性?

java - @Autowired 对象获取空值

java - 将捕获的 Fiddler 请求转换为 Java

c# - 如何解释 parallel.for (c#) 的这种奇怪行为

java - 如何扩展这个单线程 Java 客户端?

Java 8 lambda null 检查用法

java - Android APK 构建错误。显示一个有趣的错误