并发容器和同步容器

并发容器和同步容器

java的同步容器有Vector和Hashtable。
vecotor和hashtbale通过synchronized来锁定对容器状态的访问,例如get方法

1
2
3
4
5
6
7

public synchronized E get(int index) {
if (index >= elementCount)
throw new ArrayIndexOutOfBoundsException(index);
return elementData(index);
}

同步容器类是线程安全的,但复合操作不一定是线程安全的,需要客户端额外加锁来保证线程安全。

并发容器

同步容器将所有对容器状态的访问都串行化,以实现线程安全。这种性能比较低,
java5.0 引入了并发容器,在java.util.concurrent包下面

ConcurrentHashMap

ConcurrentHashMap采用了分段锁的设计,只有在同一个分段内才存在竞态关系,不同的分段锁之间没有锁竞争。
ConcurrentHashMap是弱一致性的,get,clear都是弱一致性的