1、使用Hashtable替代HashMap
当一个线程访问HashTable的同步方法时,其他线程如果也要访问同步方法,会被阻塞住。举个例子,当一个线程使用put方法时,另一个线程不但不可以使用put方法,连get方法都不可以。效率很低,所以都不会用。
Hashtable内方法上使用了synchronized。
2、类ConcurrentHashMap定义Map
源码是:
package java.util.concurrent;
public class ConcurrentHashMap<K,V> extends AbstractMap<K,V>
implements ConcurrentMap<K,V>, Serializable {
...
}
ConcurrentHashMap是JUC包中的一个类,方法内部使用了synchronized保证线程安全。
3、Collections 类的synchronizedMap(Map<K,V> m)方法可以返回一个线程安全的Map
举例:
Map<String, Integer> crunchifySynchronizedMapObject = Collections.synchronizedMap(new HashMap<String, Integer>());
经测试,ConcurrentHashMap生成的Map性能是明显优于Hashtable和Collections 的synchronizedMap()方法。
参考内容: