Skip to content

Instantly share code, notes, and snippets.

@azusa
Created October 19, 2013 07:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save azusa/7052618 to your computer and use it in GitHub Desktop.
Save azusa/7052618 to your computer and use it in GitHub Desktop.
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* スレッドセーフな{@link HashMap}です。
*/
public class ThreadSafeHashMap<K, V> extends HashMap<K, V> {
/**
* <code>serialVersionUID</code>
*/
private static final long serialVersionUID = 1L;
private Map<K, V> delegated = Collections
.synchronizedMap(new HashMap<K, V>());
@Override
public int size() {
return delegated.size();
}
@Override
public boolean isEmpty() {
return delegated.isEmpty();
}
@Override
public boolean containsKey(Object key) {
return delegated.containsKey(key);
}
@Override
public boolean containsValue(Object value) {
return delegated.containsValue(value);
}
@Override
public V get(Object key) {
return delegated.get(key);
}
@Override
public V put(K key, V value) {
return delegated.put(key, value);
}
@Override
public V remove(Object key) {
return delegated.remove(key);
}
@Override
public void putAll(Map<? extends K, ? extends V> t) {
delegated.putAll(t);
}
@Override
public void clear() {
delegated.clear();
}
@Override
public Set<K> keySet() {
return delegated.keySet();
}
@Override
public Collection<V> values() {
return delegated.values();
}
@Override
public boolean equals(Object o) {
return delegated.equals(o);
}
@Override
public int hashCode() {
return delegated.hashCode();
}
/**
* {@link java.util.HashMap}のwriteObjectメソッドがスレッドセーフでないため、インスタンスをコピーして
* {@link Set}を返しています。
*
* @return entrtySet
* @see java.util.HashMap#entrySet()
*/
@Override
public Set<Map.Entry<K, V>> entrySet() {
synchronized (delegated) {
Set<Entry<K, V>> set = new LinkedHashMap<K, V>(delegated)
.entrySet();
return set;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment