Как создать потокобезопасную или неизменяемую коллекцию в fastutils?
Fastutil, кажется, самый быстрый вариант для коллекций в Java.
Вот эти javadocs: http://fastutil.di.unimi.it/docs/it/unimi/dsi/fastutil/longs/Long2ObjectMaps.SynchronizedMap.html
но мне трудно найти пример использования.
Как я могу иметь синхронизированную (поточно-ориентированную?) Карту? Неизменная карта?
2 ответа
Каждый тип карты имеет свой собственный класс синхронизированной оболочки (например, Long2ObjectMaps.SynchronizedMap
как вы связали выше). Чтобы использовать его, создайте конкретную реализацию карты, затем используйте соответствующую …Maps.synchronize()
Способ получения синхронизированной версии:
Long2ObjectMap<Foo> unsynched = new Long2ObjectOpenHashMap<>();
// this is actually a Long2ObjectMaps.SynchronizedMap
Long2ObjectMap<Foo> synched = Long2ObjectMaps.synchronize(unsynchronized);
Существует облегченная поточно-ориентированная альтернатива: FastUtil Concurrent Wrapper .
По сравнению с подходом синхронизации fastutil по умолчанию через
synchronized(mutex)
Обертка использует
striped ReadWriteLocks
(с разными режимами), которые в некоторых случаях имеют лучшую производительность.