古老和过时的容器
vector 和Hashtable 都是用synchronized 修饰的方法。
同步的HashMap 和 ArrayList
可以使用工具类Collections.synchronizedList 和Collections.synchronizedMap 变成同步安全的。synchronized 修饰代码块。
ConcurrentHashMap
1.7的版本
1.8jdk版本相比于
几乎模仿了同时代HashMap.
常见方法:
//key和value都不能为null,利用了cas操作和synchronized实现
//当容量大于64并且链表大于8时才会转成树
put(key,value)
//计算hash值,直接取值或者在树中或者链表
get(key)
为什么把1.7的结构改成1.8?
- 16个segment是独立的。而1.8的每个node都是独立的。
- hash碰撞,树的转化
CopyOnWriteArrayList
可以在迭代过程中修改数组内容。但是修改之前的对象依然会循环到。不能保证数据的实时一致性。
并发队列
主要方法
//会阻塞
put take
//会抛异常
add remove element
//是否添加成功
boolean offer
poll // 返回并删除
peak // 返回不删除