多线程与高并发集合

了解集合之前咱们先看下关系图
在这里插入图片描述
放大图片
从图中可以看出,集合分为两个部分,Map和Collection,
Map中咱们常用的有HashMap、ConcurrentHashMap;List常用的集合有ArrayList、LinkedList;Set常用的有HashSet、TreeSet;Queue今天是咱们的重点,下面会详细介绍用法。

List

想了解ArrayList、LinkedList源码的童鞋点击传送

Vactor:底层数据结构是数组结构,线程安全。
ArrayList:底层数据结构是数组结构,非线程安全,查询快,增删慢。
LinkedList:底层数据结构是链表结构,非线程安全,增删快查询慢。
CopyOnWriteArrayList:(每次写数据都会复制一个副本,然后再改变引用),合适读多写少的场景,线程安全

set

HashSet:无需不可重复
SortedSet:有序不可重复
		TreeSet:基于红黑树实现
		ConCurrentSkipListSet:通过跳跃表实现

Queue

BlockingQueue(线程池使用)
  ArrayBlockingQueue(公平、非公平)
      ArrayBlockingQueue fairQueue = new ArrayBlockingQueue(1000,true);
      		内部维护一个数组
      		offer(E e);//数组满的时候返回false,如果没满,那么插入数据到Array中
      		add(E e);//数组是满的那么add会抛出IllegalStateException异常
      		put(E e);//
  LinkedBlockingQueue(两个独立锁提高并发)
      生产者和消费者采用了独立的锁来控制数据同步
      新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素
      LinkedBlockingQueue(Integer.MAX_VALUE);
      		添加方法:
      				内部使用可重入锁保证线程安全
      				put(e); //该方法没有返回值,当队列已满时,会阻塞当前线程
      				offer(e,timeout,unit);//当队列已满时,会阻塞给定时间
      				offer(e);//不会阻塞,直接返回
      						takeLock这个可重入锁保证线程安全
      						enqueue()方法实现节点的添加
      						AtomicInteger保证原子性
      		获取方法:
      				take();
      				poll(timeout,unit);//队列为空,则阻塞给定的时间
      				poll();//队列为空,则直接返回null
      						takeLock这个可重入锁保证线程安全
      						dequeue()从队头取出元素
      						AtomicInteger保证原子性
  PriorityBlockingQueue(compareTo排序实现优先)
  		内部维护了一个object数据
      支持优先级的无界队列,可以自定义排序规则
      取出的数据是队列中最小的
          存储:[a, d, c, e, z]
          取出:a c d e z 
  SynchronousQueue(不存储数据,可用于传递数据)
      是一个不存储元素的阻塞队列,每一个put操作必须等待一个take操作,否则不能继续添加元素
          阻塞:put(e);
          阻塞:take();
  DelayQueue(缓存失效、定时任务)
      支持获取元素的无界阻塞队列
				
ConcurrentLinkedQueue extends AbstractQueue implements Queue 线程安全
	方法
		添加:
			offer(e);//add
		获取:
			poll();//获取并删除首节点
			peek();//获取首节点
TransferQueue(接口)
	LinkedTransferQueue (线程安全)
    tryTransfer();// 如果存在一个消费者已经等待接收它,则立即传送指定的元素,否则返回false,并且不进入队列
    transfer();// 如果存在一个消费者已经等待接收它,则立即传送指定的元素,否则等待直到元素被消费者接收
    take();	
Deque
	ArrayyDeque:类似LinkedList

Map

有兴趣的同学HashMap源码可以点击传送门

Dictionary
	HsahTable:线程安全,插入效率高,读取效率低
HashMap:非线程安全
ConcurrentMap:分段锁,线程安全,插入效率低,查询效率高

今天先到这里了,对文章感兴趣的童鞋关注下博主吧~~

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值