java并发容器

1、concurrenthashmap:
HashMap我们知道是非线程安全的,Hashtable是线程安全的,但是Hashtable容器,synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,阻塞的影响太大,性能很差。还好Java提供了ConcurrentHashMap,它采用了锁分离技术,多个线程可以并发的对ConcurrentHashMap进行操作。
但是JDK1.8和JDK1.6,在ConcurrentHashMap的实现上发生了巨大的变化。实现线程安全的思想也已经完全变了,它摒弃了Segment(锁段)的概念,而是利用CAS算法。它沿用了与它同时期的HashMap版本的思想,底层依然由“数组”+链表+红黑树,为了做到并发,又增加了很多辅助的类,例如TreeBin,Traverser等对象内部类。在JDK1.8中的并发控制都是针对具体的桶而言,即有多少个桶就可以允许多少个并发数。
先来简单了解一下CAS算法的原理:不断地去比较当前内存中的变量值与你指定的一个变量值是否相等,如果相等,则接受你指定的修改的值,否则拒绝你的操作。因为当前线程中的值已经不是最新的值,你的修改很可能会覆盖掉其他线程修改的结果。这一点与乐观锁,SVN的思想是比较类似的。就像SVN提交代码一样,如果发现SVN中的代码和你现在的代码版本一致,则你可以把你的代码提交上去,如果不一致,说明在你提交前有人已经提交过了,所以你必须先更新成最新的版本后,才能提交。
ConcurrentHashMap的数据的插入与删除等的基本流程和HashMap基本一致,在线程安全方面ConcurrentHashMap使用了CAS方式加上synchronized关键字。

2、CopyOnWriteArrayList
CopyOnWriteArrayList是一个线程安全,并且在读操作时无锁的ArrayList 
在读多写少,且线程数很多的情况下,比较合适。ReentrantLock保证线程安全
3、ArrayBlockingQueue:一个有界阻塞队列,可以实现生产者–消费者问题
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值