并发容器

并发容器

读写锁ReentrantReadWriteLock
排斥性
+当有一个readLock读锁时,不会排斥其他的读锁
可多线程同时进行
+当有一个writeLock写锁时,会拒绝所有的读写锁
只能单线程进行

CopyOnWriteArrayList与ArrayList的区别
+ CopyOnWriteArrayList没有初始容量的说法,需要添加元素时长度+1
+ CopyOnWriteArrayList涉及添加修改的时候使用ReentrantLock加锁,保证线程安全
+ CopyOnWriteArrayList遍历时不能进行删除操作,LinkedList在遍历时可以删除
+ ArrayList线程不安全,为了拒绝多线程边读边写的情况,引入了falsefast快速失败的过程
+ CopyOnWriteArrayList迭代使用snapshot快照,没有快速失败过程

CopyOnWriteArrayList优缺点
优点
+ 在写操作的同时允许读操作,大大提高了读操作的性能
缺点
+ 内存占用:如果CopyOnWriteArrayList经常要增删改里面的数据,经常要执行add()、set()、remove()的话,那是比较耗费内存的。
+ 数据一致性:CopyOnWrite容器只能保证数据的最终一致性,不能保证数据的实时一致性。

ConcurrentHashMap
+写入过程,cas表征安全,实际不安全,独占锁过程安全
+与HashMap对比,链接: HashMap底层.

线程小工具
CountDownLatch
声明格式:

CountDownLatch cd = new CountDownLatch(5);

latch.wait() 执行的线程会被阻塞,直至计数器归零
latch.Count() 每执行一次,计数器减一,直至计数器归零,所有await线程才能开始执行
一次性通过后失效
CyclicBarrier循环栅栏
循环执行
Semaphore 信号量
初始化格式:

			Semaphore semaphore = new Semaphore(10);

请求不能超过最大

			semaphore.acquire(5);

释放数可以大于请求数字

			semaphore.release(8);

释放默认最少1
最后结果为
原来的-获得的+还了的
上面例子的结果为:13

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值