在multiThreading中,我想使用一个将要更新的地图,考虑到性能1. HashMap 2. ConcurrentHashMap,哪个地图会更好?另外,如果我将它设置为易失性,它的执行速度会很慢吗?
它将在Java批处理中使用大约。两千万条记录。目前,我没有在线程之间共享此映射。线程间共享map会降低性能吗?
发布于 2017-06-21 14:58:11
HashMap的性能会更好,因为它不会以任何方式进行同步。ConcurrentHashMap增加了管理并发读取和并发写入访问的开销。
也就是说,在多线程环境中,您需要负责根据需要同步对HashMap的访问,这也会降低性能。
因此,只有在用例允许对同步逻辑进行非常具体的优化时,我才会选择HashMap。否则,ConcurrentHashMap将为您节省大量计算同步的时间。
但是,请注意,即使使用ConcurrentHashMap,也需要仔细考虑所需的同步级别。ConcurrentHashMap是线程安全的,但不是完全同步的。例如,如果您绝对需要同步每个读访问和每个写访问,则仍然需要自定义逻辑,因为对于读操作,ConcurrentHashMap将提供上一次成功完成写操作后的状态。也就是说,可能仍有读操作看不到的正在进行的写操作。
至于易失性,这只能确保对该特定字段的更改将在线程之间同步。由于您可能不会更改对HashMap / ConcurrentHashMap的引用,而是在实例上工作,因此性能开销将可以忽略不计。
https://stackoverflow.com/questions/44668385
复制相似问题