【深入理解Java原理】如何保证容器是线程安全的? ConcurrentHashMap 如何高效的线程安全?

如何保证容器是线程安全的? ConcurrentHashMap 如何高效的线程安全?

Java提供了不同层面的线程安全支持。在传统集合框架内部,除了 Hashtable等同步容器,还提供了所谓的同步包装器(Synchronized Wrapper),我们可以调用Collections工具类提供的包装方法,来获取一个同步的包装容器(如 Collections.synchronizedMap),但是它们都是利用非常粗粒度的同步方式,在高并发情况下,性能比较低下。其实可以利用并发包提供的线程安全容器。

  • 各种并发容器,比如 ConcurrentHashMap、CopyOnWriteArrayList
  • 各种线程安全队列(Queue/Deque),比如 ArrayBlockingQueue,SynchronousQueue
  • 各种有序容器的线程安全版本。

如何保证线程安全

首先要保障线程安全的几个基本特性, 原子性,可见性,有序性。
其次可以通过封装的方式将内部对象保护起来,保证变量对象的不可变性,一般就线程安全了。

  • 理解基本的线程安全工具
  • 理解传统集合矿建并发变成中 Map 存在的问题,清楚简单同步方式的不足
  • 梳理并发包内,尤其是 ConcurrentHashMap 采取了哪些方法来提高并发表现。
  • 最好能够掌握 ConcurrentHashMap 自身的演进,目前很多分析资料还是基于早期版本。

为什么需要 ConcurrentHashMap

Hashtable 是怎样实现线程安全的。

Hashtable 能够保证线程安全,但是它的基本就是将 put ,get ,size 等各种操作加上 synchronized, 这样就导致了所有并发操作都要竞争一把锁

wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值