这种方式虽然可以保证线程安全和数据一致,读的效率不受影响,但写的效率太低,适合用于高频率读低频率写的场景。
2) 线程安全的HashTable对象:
HashTable可以说是多线程环境下的HashMap,它除了线程安全这个特性之外,其余特点几乎与HashMap一样,所以高版本(>JDK1.5)的Java中一般不选择使用HashTable这话中数据类型。
3) 线程安全的ConcurrentHashMap对象:
之所以多线程环境下选择使用ConcurrentHashMap而不选择HashTable的原因是,线程对HashTable的加锁是独占式的,即同时只允许一个线程对HashTable加写锁,写的效率大大降低,而ConcurrentHashMap的加锁机制有别于HashTable:
ConcurrentHashMap将hash表分为16个桶(默认值),诸如put,remove等常用写操作只锁当前需要用到的桶,原来只能一个线程进入,现在能同时有16个写线程进入(写线程才需要锁定,而读线程几乎不受限制),相对于HashTable而言,ConcurrentHashMap并发性的提升是显而易见的。
所以,昨天提到的问题就可以用ConcurrentHashMap来完美解决,既能保证写效率的提升,又不影响读取效率。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/gisredevelopment/article/details/47720229