Created
October 19, 2013 07:25
-
-
Save azusa/7052618 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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