ConcurrentHashMap
гораздо более масштабируемый: http://www.javamex.com/tutorials/concurrenthashmap_scalability.shtml
HashTable
и Collections.synchronized(HashMap)
обеспечивают такую же производительность, но они условно потокобезопасный (т.е. они не являются полностью потокобезопасный)
Если есть много операций чтения, я бы рекомендовал, чтобы обернуть его с замками для чтения записи:
public class MyHashMap<K, V> extends HashMap<K, V> {
private final ReadWriteLock lock = new ReentrantReadWriteLock();
@Override
public V put(K key, V value) {
final Lock w = lock.writeLock();
w.lock();
try {
return super.put(key, value);
} finally {
w.unlock();
}
}
@Override
public V get(Object key) {
final Lock r = lock.readLock();
r.lock();
try {
return super.get(key);
} finally {
r.unlock();
}
}
.... // the same approach distinguishing read and write operations
}
UPDATE:
Я буду называть много добытчика этого объекта, и они не были бы в то же время
Это не гарантирует, что вам не нужно синхронизировать.
Я не ищу ничего, что потокобезопасно, потому что к ним всегда будет обращаться только администратор. ConcurrentHashMap громоздкий по сравнению с HashMap и HashTable. Я не точный размер, но это было похоже на пустые concurrenthashmap - 170 и хеш-таблицы - 150 – nandu
Вы получаете доступ к карте в веб-приложении? Если к нему обращаются из разных потоков (что относится к любой стороне сервера), тогда он должен быть потокобезопасным, даже если к нему обращается только один пользователь. –
Функциональность его использования немного сложна для объяснения. Но я уверен, что с ним не будет никаких проблем с потоком. – nandu