Semaphore信号量
资源有限共享时对线程的强占
并发集合
List set map
并发环境下
遍历的过程中不容许更新操作(增删改)
ConcurrentCollection
大致分为两类
非阻塞式集合(Non-Blocking Collection) ConcurrentLinkedDeque
这类集合也包括添加和移除数据的方法。如果方法不能立即被执行,则返回null或抛出异常,但是调用这个方法的线程不会被阻塞。
实例
添加大量的数据到一个列表中;
从同一个列表中移除大量的数据。
阻塞式集合(Blocking Collection) LinkedBlockingDeque
阻塞式集合(Blocking Collection):这类集合包括添加和移除数据的方法。当集合已满或为空时,被调用的添加或者移除方法就不能立即被执行,那么调用这个方法的线程将被阻塞,一直到该方法可以被成功执行。
分析ConcurrentHashMap
HsahMap
DataStructure
ConcurrentLinkedDeque
poll
()
获取并移除此队列的头,如果此队列为空,则返回 null。
Node
LinkedBlockingDeque
|
|
|
put
(
E e)
将指定的元素插入此双端队列表示的队列中(即此双端队列的尾部),必要时将一直等待可用空间。
take
()
获取并移除此双端队列表示的队列的头部(即此双端队列的第一个元素),必要时将一直等待可用元素。
HashMap entry<k,v>
LinkedTransferQueue 生产-消费
PriorityBlockingQueue 优先级
ArrayBlockingQueue
ConcurrentHashMap
ConcurrentLinkedQueue
ConcurrentSkipListMap
ConcurrentSkipListSet
CopyOnWriteArrayList
CopyOnWriteArraySet
HashMap
数组+链表
原子操作
CAS
AtomicInteger
Long
64
32 32
CAS
CompareAndSet
此引用所引用的对象类型。
ABA问题
100--》120--》100
101-》120
100 1---->120 2----->100----3
100 1------120