并发集合

余生长醉 提交于 2019-12-06 02:17:19

Semaphore信号量

 

资源有限共享时对线程的强占

 

并发集合

 

List  set  map

并发环境下

遍历的过程中不容许更新操作(增删改)

ConcurrentCollection

大致分为两类

  非阻塞式集合(Non-Blocking Collection  ConcurrentLinkedDeque

  这类集合也包括添加和移除数据的方法。如果方法不能立即被执行,则返回null或抛出异常,但是调用这个方法的线程不会被阻塞。

 

  实例

  添加大量的数据到一个列表中;

  从同一个列表中移除大量的数据。

 

  阻塞式集合(Blocking Collection LinkedBlockingDeque

  阻塞式集合(Blocking Collection):这类集合包括添加和移除数据的方法。当集合已满或为空时,被调用的添加或者移除方法就不能立即被执行,那么调用这个方法的线程将被阻塞,一直到该方法可以被成功执行。

 

 

 

分析ConcurrentHashMap

HsahMap

 

DataStructure

ConcurrentLinkedDeque

 

add(E e)           将指定元素插入此队列的尾部。

offer(E e)           将指定元素插入此队列的尾部。

poll()        获取并移除此队列的头,如果此队列为空,则返回 null

Node

 

 

 

LinkedBlockingDeque

 

LinkedBlockingDeque() 
          创建一个容量为 Integer.MAX_VALUE 的 LinkedBlockingDeque

LinkedBlockingDeque(Collection<? extends E> c) 
          创建一个容量为 Integer.MAX_VALUE 的 LinkedBlockingDeque,最初包含给定 collection 的元素,以该 collection 迭代器的遍历顺序添加。

LinkedBlockingDeque(int capacity) 
          创建一个具有给定(固定)容量的 LinkedBlockingDeque

put(E e) 
          将指定的元素插入此双端队列表示的队列中(即此双端队列的尾部),必要时将一直等待可用空间。

take() 
          获取并移除此双端队列表示的队列的头部(即此双端队列的第一个元素),必要时将一直等待可用元素。

HashMap   entry<k,v>

 

LinkedTransferQueue  生产-消费

PriorityBlockingQueue 优先级

 

ArrayBlockingQueue 
ConcurrentHashMap 
ConcurrentLinkedQueue 
ConcurrentSkipListMap 
ConcurrentSkipListSet 
CopyOnWriteArrayList 
CopyOnWriteArraySet 

 

 

 

HashMap

 

数组+链表

 

 

 

 

原子操作

 

 

  CAS  

AtomicInteger

tomicBoolean 
AtomicInteger 

AtomicLong 

 

 

Long

 

64

32   32

 

 

CAS

 

CompareAndSet

 

 此引用所引用的对象类型。

 

 

ABA问题

100--》120--》100

101-》120

 

AtomicStampedReference

 

100   1---->120   2----->100----3

100   1------120

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!