Fastutil 似乎是 Java 中集合的最快选择。
有这些javadocs: http: //fastutil.di.unimi.it/docs/it/unimi/dsi/fastutil/longs/Long2ObjectMaps.SynchronizedMap.html
但我很难找到用法示例。
我怎样才能有一个同步的(线程安全的?)映射?不可变的地图?
Fastutil 似乎是 Java 中集合的最快选择。
有这些javadocs: http: //fastutil.di.unimi.it/docs/it/unimi/dsi/fastutil/longs/Long2ObjectMaps.SynchronizedMap.html
但我很难找到用法示例。
我怎样才能有一个同步的(线程安全的?)映射?不可变的地图?
每种地图类型都有自己的同步包装类(例如Long2ObjectMaps.SynchronizedMap
,如您在上面链接的那样)。要使用它,请实例化一个具体的地图实现,然后使用相应的…Maps.synchronize()
方法获取同步版本:
Long2ObjectMap<Foo> unsynched = new Long2ObjectOpenHashMap<>();
// this is actually a Long2ObjectMaps.SynchronizedMap
Long2ObjectMap<Foo> synched = Long2ObjectMaps.synchronize(unsynchronized);
有一个轻量级的线程安全替代方案:FastUtil Concurrent Wrapper。
与通过synchronized(mutex)
The Wrapper 使用的默认 fastutil 同步方法striped ReadWriteLocks
(使用不同的模式)相比,在某些情况下具有更好的性能。