【发布时间】:2015-07-21 14:46:27
【问题描述】:
在我的应用程序中,我将使用地图。
- 多个线程将数据写入此映射。写操作太多。
- 但是,在每次写入期间,馈送到地图的数据具有不同的键。
- 在应用程序的任何时候都不会读取地图中的数据。
- 有时,内容会转储到文件中。
我想知道以下内容:
- 在这种情况下,是否需要同步写入方法?
- ConcurrentHashMap 是否适合我的需求?
- 如果不是,那么在此使用的正确 Map 实现是什么? 案例?
【问题讨论】:
-
"地图中的数据不会在应用程序中的任何位置读取" 然后"偶尔会将内容转储到文件中" - 那么如何在不读取地图的情况下转储到文件?
-
这两点是不兼容的:“地图中的数据不会在应用程序中的任何点被读取”和“有时内容会被转储到文件中”。如果不读取地图的全部内容,则无法将内容转储到文件中。
-
您可能还想考虑为每个线程保留一个映射,然后在转储到文件时合并它们。然后,只有当您转储到文件时才会阻止对地图的访问,而不是每次写入都会阻止。
-
您需要将键序列化到文件中,还是仅将值序列化?
-
ConcurrentHashMap在答案中得到了很多赞许。它可能适合您的需要,但前提是文件转储永远不会重叠,并且您的地图不需要接受null作为键。如果您执行任何聚合操作(例如putAll()或clear())并要求它们相对于转储到文件操作而言是原子的,则也不会。
标签: java multithreading dictionary synchronization concurrenthashmap