在并发开发情况下,我们常用的list,map,set都会变得不安全。
-
为了保证安全,list可用CopyOnWriteArraylist包,set底层是hashmap实现,同样也可以使用CopyOnWriteArraySet(),或者Collections集合中的synchronizedSet。map使用的是concurrenthashmap来保证
-
其中的copyonwrite是COW原理,即写时覆盖,源码如下:
public boolean add(E e) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
Object[] elements = getArray();
int len = elements.length;
Object[] newElements = Arrays.copyOf(elements, len + 1);
newElements[len] = e;
setArray(newElements);
return true;
} finally {
lock.unlock();
}
} -
concurrentHashMap原理其实使用的是分段锁原理来提高效率。map其实还有其他的保证并发的相关包如hashtable(把表头的hasp表全锁住)效率不够