Map线程安全几种实现方法

 若是须要使 Map 线程安全,大体有这么四种方法: 

1、使用 synchronized 关键字,代码以下 java

synchronized(anObject) {    安全

    value = map.get(key); spa

}   线程

2、使用 JDK1.5提供的java.util.concurrent.locks.Lock)。代码以下 get

lock.lock();    同步

value = map.get(key);    it

lock.unlock();   效率

3、使用 JDK1.5 提供的读写锁java.util.concurrent.locks.ReadWriteLock)。代码以下  map

rwlock.readLock().lock();    方法

value = map.get(key);   

rwlock.readLock().unlock();  

这样两个读操做能够同时进行,理论上效率会比方法 高。 
4、使用 JDK1.5 提供的 java.util.concurrent.ConcurrentHashMap 类。该类将 Map 的存储空间分为若干块,每块拥有本身的锁,大大减小了多个线程争夺同一个锁的状况。代码以下

value = map.get(key); //同步机制内置在 get 方法中。每一个桶都有本身的锁

比较: 

1、不一样步确实最快,与预期一致。 
2、四种同步方式中,ConcurrentHashMap 是最快的,接近不一样步的状况。

三、synchronized 关键字很是慢,比使用锁慢了两个数量级。若是需本身实现同步,则使用 JDK1.5 提供的锁机制,避免使用 synchronized 关键字。

相关文章
相关标签/搜索