Когда я делаю Collections.synchronizedMap (someHashMap), все ли доступ к карте синхронизированы? Или только операции записи (put) синхронизированы? Как насчет чтения двух потоков с карты? Будет ли она синхронизирована? Doesnt кажется необходимым Как abotu, если один поток выполняет put(), а другой делает get()?Использует ли метод synchronizedMap в коллекциях операции чтения и записи
ответ
Посмотрите на исходный код SynchronizedMap
, который обертывает ваш Map
.
...
public V get(Object key) {
synchronized (mutex) {return m.get(key);}
}
public V put(K key, V value) {
synchronized (mutex) {return m.put(key, value);}
}
public V remove(Object key) {
synchronized (mutex) {return m.remove(key);}
}
... // more methods synchronized in the same way
От
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {
return new SynchronizedMap<>(m);
}
Так что, да, все доступы синхронизированы.
Но, к сожалению, чтение и запись синхронизируются во внутреннем мьютексе, что делает невозможным повторение итерации внешнего кода при выполнении блокировки. EDIT: Sotirios и Affe верны, и мои комментарии следует игнорировать. – dnault
Вот что говорит javadoc: 'Обязательно, чтобы пользователь вручную синхронизировал на возвращенной карте при итерации по любому из своих видов коллекции: ...' –
мьютекс действительно просто «это», то, как он написан, просто идиоматическое. Синхронизация карты для итерации выполняется правильно. – Affe
Да, он синхронизирует все операции. Он не использует многопользовательский подход с одним писателем - это так же просто, как синхронизация всего доступа через один монитор.
Оба чтения и записи синхронизированы, что необходимо для обеспечения видимости.
Все вызовы вызовов в коллекции синхронизированы. Только одному потоку будет разрешено читать/изменять коллекцию за раз.
Синхронизированные * методы из Коллекций не предназначены для лучшей версии/реализации потоковой безопасности. Они просто должны быть удобными.
Синхронизация является сложной проблемой и обычно требует разных подходов синхронизации на основе вашего конкретного сценария. Если вам требуются другие типы безопасности потоков, существует множество других доступных для потолка коллекций. Вы также можете сами написать логику синхронизации.
- 1. Операции чтения/записи Influxdb
- 2. Операции чтения/записи данных
- 3. Операции чтения/записи в MEAN.js
- 4. подталкивания :: Asio операции чтения/записи
- 5. Операции записи/чтения Java-массива
- 6. valgrind-invalid операции чтения и записи
- 7. Использует ли метод чтения AudioInputStream заголовок заголовка?
- 8. раз операции чтения и записи для файла
- 9. Операции чтения/записи файла .xlsx
- 10. Разрешены ли операции чтения/записи в RAID при сбое диска?
- 11. Realm.io: Выполняются ли операции записи/чтения в основном потоке?
- 12. Почему в Solr используются отдельные операции записи и чтения?
- 13. Как проверить, доступна ли память для операции чтения/записи?
- 14. Как настроить блокировку операции чтения-манипулирования-записи?
- 15. Неизменяемые операции Scala в изменяемых коллекциях
- 16. Минимизировать код ссылки на операции чтения/записи
- 17. Являются ли операции linq в параллельных коллекциях потоками безопасными?
- 18. Как десериализовать synchronizedMap и synchronizedList?
- 19. ConcurrentHashMap блокировки чтения и записи
- 20. лучше организовать операции чтения/записи в моем проекте
- 21. Elasticearch согласованность чтения и записи
- 22. Может ли паркет поддерживать параллельные операции записи?
- 23. записи и чтения Plist
- 24. метод выполнения партии операций чтения/записи в базе данных
- 25. Метод, который использует BufferedReader для чтения файла и возврата массива
- 26. Синхронизация чтения/записи
- 27. интерфейс чтения и метод чтения в golang
- 28. делает устройство чтения (записи) мощности определяют минимальное время выполнения для чтения (записи) операции
- 29. Как часто выполнять операции чтения/записи файлов (многопоточные) в python?
- 30. Async метод для чтения и записи в файл XML
Потому что 'Collections.synchronizedMap' является настолько базовым, что почти непригодно. Существует ConcurrentHashMap для более серьезного одновременного использования. –