同步容器
同步容器通过synchronized
关键字润饰容器,保障同一时刻只有一个线程应用容器,从而使容器线程平安.synchronized
的意思的同步.
1.Vector和ArrayList都实现了List接口,Vector对数组的操作和ArrayList都一样,区别在于Vector在可能呈现线程平安的办法上都加了synchronized
关键字润饰.
2.Stack是Vector的子类,Stack实现的是先进后出,在出栈入栈都进行了synchronized
润饰.
3.HashTable:它实现了Map接口,操作和HashMap一样(区别:HashTable不能存null,HashMap键值都能够为null),HashTable的所有操作都加了synchronized
润饰.
4.Collections提供了线程同步汇合类
List list=Collections.synchronizedList(new ArrayList());Set set=Collections.synchronizedSet(new HashSet());Map map=Collections.synchronizedMap(new HashMap());
并发容器
并发容器是指容许多线程拜访的容器,并保障线程平安.为了尽可能进步并发,Java并发工具包中采纳多种优化形式来进步并发容器的执行效率,外围就是锁,CAS(无锁),COW(读写拆散),分段锁.
1.CopyOnWriteArrayList
CopyOnWriteArrayList相当于实现了线程平安的ArrayList,在对容器写入时,Copy出一份正本数组,实现操作后把正本数组的援用赋值给容器,底层是通过ReentrantLock来保障同步. 但它通过就义容器的一致性来换取容器的并发(在Copy期间读取的还是旧数据),所以不能在强统一的场景下应用.
2.CopyOnWriteArraySet
CopyOnWriteArraySet和CopyOnWriteArrayList的原理一样,它是实现了CopyOnWrite机制的Set汇合.
3.ConcurrentHashMap
ConcurrentHashMap相当于实现了线程平安的HashMap,Key是无序的,并且key和value都不能为null,在JDK8之前,采纳分段锁的机制来进步并发,只有在操作同一段键值对是才须要加锁.JDK8当前才用CAS算法进步容器的并发.
4.ConcurrentSkipListMap
ConcurrentSkipListMap相当于实现了线程平安的TreeMap,key是有序的,key和value不容许为null,它采纳跳跃表的来代替红黑树,起因是红黑树在插入或者删除节点时须要做旋转调整,导致要管制的粒度太大.而跳跃表应用的是链表,利用CAS算法实现高并发线程平安.
5.ConcurrentSkipListSet
ConcurrentSkipListSet和ConcurrentListMap的原理一样,它是实现了线程平安的TreeSet
强一致性
零碎中某个数据更新后,后续任何对该数据的读取都将获取到最新的值,在任意时刻,所有节点中的数据是一样的。对于关系型数据库,要求更新过的数据能被后续的拜访都能看到,这是强一致性。
弱一致性
零碎中某个数据被批改后,后续对该数据的读取有可能取得更新之后的值,可能取得更新前的数据,但通过不统一的窗口这段时间,后续对该数据的读取将取得更改之后的值.
最终一致性
是弱一致性的非凡模式,存储系统在保障没有更新的状况下,最总所有对该数据的拜访都会失去更新后的数据.不保障在任意时刻任意节点上的同一份数据都是雷同的,然而随着工夫的迁徙,不同节点上的同一份数据总是在向趋同的方向变动。