【发布时间】:2016-05-22 15:25:16
【问题描述】:
我有以下私人收藏:
final private ConcurrentHashMap<Book,BookLog> booklogMap;
我目前在构造函数中这样复制:
this.booklogMap = new ConcurrentHashMap<Book, BookLog>(booklogMap);
这是在构造函数中创建防御性副本的正确方法吗?如果不是,您如何正确地制作线程安全集合的防御性副本?
【问题讨论】:
-
使用不可更改的包装器怎么样? stackoverflow.com/a/4262459/13422
-
@ZanLynx - 我试过了,但它一直给我投射错误,你能告诉我怎么做吗?
-
我从未在 Concurrent 上尝试过任何东西,可能需要进行实验。
-
如果要在调用 ctor 时捕获地图的状态,则需要进行复制。使用不可更改的包装器只会阻止您的类修改列表。如果其他代码更改了列表,那么您的班级将看到这些更改,您的班级将不得不担心对列表的并发更改。
-
@pcarter - 我将如何处理并发哈希图?
标签: java multithreading