Java同步容器与并发容器

1、同步容器类

同步容器类包括Vector和Hashtable

同步容器类是线程安全,这是因为这些类实现线程安全的方式是把它们的状态封装起来,并且对每个共有方法都进行同步,使得每次只有一个线程能访问容器的状态。

1.1  同步容器类的问题

  1. 同步容器类在进行迭代,跳转,条件运算时,如果其它线程并发的修改容器,就会出现意外的行为。
  2. 同步容器类将所有对容器状态的访问都串行化,严重降低了并发性,当多个线程竞争容器的锁时,吞吐量将严重降低。

2、并发容器类

ConcurrentHashMap:采用分段锁机制,在并发环境下实现更高的吞吐量,在单线程环境下只损失非常小的性能。

CopyOnWriteArrayList:代替同步List,当且仅当迭代操作远远多于修改操作时,才应该使用写入时复制容器。类似的,CopyOnWriteArraySet一样。

3、阻塞队列

ArrayBlockingQueue与LinkedBlockingQueue

3.2 相同点

相同点:都是FIFO的阻塞队列。

3.1 不同点

  1. ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列,而LinkedBlockingQueue内部是用链表来存储数据的。
  2. ArrayBlockingQueue内部通过“互斥锁”保护竞争资源,实现了多线程对竞争资源的互斥访问。ArrayBlockingQueue内部是以数组为容器盛放元素,并且放入和取出元素的时候使用同一个锁,也就是放入的时候不能同时取出元素. LinkedBlockingQueue内部是用链表来存储数据的,并且有两把锁,放数据锁与取数据锁,也就是放入数据的线程和取出数据的线程可以同时操作LinkedBlockingQueue
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值