ConcurrentHashMap Разъяснение документации - PullRequest
3 голосов
/ 04 января 2012

ConcurrentHashMap полностью совместим с Hashtable в программах, которые полагаются на безопасность потоков, но не на детали синхронизации

Я запутался с информацией о безопасности потоков и синхронизации, кто-нибудь может привести пример?

Ответы [ 3 ]

10 голосов
/ 04 января 2012

Hashtable имеет каждый метод synchronized, и это общедоступная информация. Например, вы можете наследовать от Hashtable, добавлять больше synchronized методов - и знать, что вы в основном работаете нормально, так как используете тот же механизм синхронизации .

Более того, ваш код может использовать блок synchronized (myHashTable), что фактически гарантирует отсутствие вызова методов myHashTable из других потоков, пока вы находитесь в этом блоке.

Это все «подробности синхронизации» , которые доступны вам и которые вы можете использовать (не поощряя).

Не так с ConcurrentHashMap: это столь же потокобезопасно (и даже более того, см., Например, ответ Питера Лоури) как Hashtable, но вам не сказали как это безопасность потока достигнута. В результате вы не можете злоупотреблять или расширять его так, как вам нравится: вы должны использовать его как есть.

2 голосов
/ 04 января 2012

Общепринятым правилом безопасности потоков является то, что Iterator, возвращаемый методом iterator() для keySet (), entrySet () или values ​​(), не является поточно-ориентированным для Hashtable, Vector, Collection.synchronizedXxxx (collection). Хотя сам метод является потокобезопасным, как только он возвращает итератор, он может быть недействительным.

ConcurrentHashMap не имеет этой проблемы, поскольку обеспечивает слабую согласованность. то есть все, что добавлено, удалено во время Итерации, может или не может быть видно, но в противном случае записи выглядят так, как ожидалось.

0 голосов
/ 04 января 2012

ConcurrentHashMap позволяет одновременно изменять карту из нескольких потоков без необходимости их блокировки.

Ознакомьтесь с руководством по Синхронизация и безопасность потоков

...