【发布时间】:2017-04-30 00:30:05
【问题描述】:
我有一个哈希图:
LinkedHashMap<Long, List<IOperation>> operations.
这是由多个线程写入的。我在它周围加了一把锁。
synchronized (lock){...}
确保在给定时刻只有 1 个线程对其进行写入。
尽管如此,在某些情况下我需要对其进行一些长读请求。
为此我复制了地图:
temp.putAll(operations);
或
= new LinkedHashMap<>(operations)
有没有办法在以下前提下制作这样的副本:
- 复制时无需锁定地图。
- 地图及其副本的成员没有按值调用。
已经谢谢了
一些额外的细节。
我经常对其执行一些长读操作,性能至关重要。
【问题讨论】:
-
基本上,不,您必须使用
lock进行任何操作,尤其是您上面列出的那些操作。任何其他风险ConcurrentModificationException或更糟。
标签: java multithreading hashmap linkedhashmap