当前位置: 首页 > news >正文

建站宝盒做的网站/营销策划36计

建站宝盒做的网站,营销策划36计,便宜靠谱的建站公司,网站开发 英语HashMap线程安全面试题(含答案) HashMap线程安全面试题(含答案) Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的。 看下面两个场景: 1、当用在方法内的局部变量时,局部变量属于当…

HashMap线程安全面试题(含答案)
HashMap线程安全面试题(含答案)

Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的。
看下面两个场景:
1、当用在方法内的局部变量时,局部变量属于当前线程级别的变量,其他线程访问不了,所以这时也不存在线程安全不安全的问题了。
2、当用在单例对象成员变量的时候呢?这时候多个线程过来访问的就是同一个HashMap了,对同个HashMap操作这时候就存在线程安全的问题了。

线程安全的Map
为了避免出现场景2的线程安全的问题,不能使用HashMap作为成员变量,要寻求使用线程安全的Map,下面来总结下有哪些线程安全的Map呢?

1、HashTable

private Map<String, Object> map = new Hashtable<>();

来看看HashTable的源码
HashTable的get/put方法都被synchronized关键字修饰,说明它们是方法级别阻塞的,它们占用共享资源锁,所以导致同时只能一个线程操作get或者put,而且get/put操作不能同时执行,所以这种同步的集合效率非常低,一般不建议使用这个集合。

2、SynchronizedMap

private Map<String, Object> map = Collections.synchronizedMap(newHashMap<String, Object>());

这种是直接使用工具类里面的方法创建SynchronizedMap,把传入进行的HashMap对象进行了包装同步而已,来看看它的源码。

这个同步方式实现也比较简单,看出SynchronizedMap的实现方式是加了个对象锁,每次对HashMap的操作都要先获取这个mutex的对象锁才能进入,所以性能也不会比HashTable好到哪里去,也不建议使用。

3、ConcurrentHashMap - 推荐

private Map<String, Object> map = new ConcurrentHashMap<>();

这个也是最推荐使用的线程安全的Map,也是实现方式最复杂的一个集合,每个版本的实现方式也不一样,在jdk8之前是使用分段加锁的一个方式,分成16个桶,每次只加锁其中一个桶,而在jdk8又加入了红黑树和CAS算法来实现。

虽然实现起来很复杂,但使用起来也是非常简单的,在java面试中问的频率也非常高,最重要的是性能要比上面两种同步方式要快太多,推荐使用。

http://www.jmfq.cn/news/4882429.html

相关文章:

  • 专门做民宿的网站/windows优化大师官方
  • 动态网站设计用那个软件/百度快照seo
  • 仿网站建设/搜索引擎优化不包括
  • 网站开发 企业宣传册/百度推广营销方案
  • 网站常识/广告投放渠道
  • 做网站点击软件/搜索关键词排名优化服务
  • 网站开发前端要学什么/成都网站建设系统
  • wordpress 媒体库清理/新网站 seo
  • 深圳网站建设公司熊掌号/中小企业管理培训课程
  • 千图网网站怎么做/网络营销策划推广公司
  • 外国人做家具的网站/网站搜索系统
  • 怎么做动态网站视频教程/重庆百度推广排名
  • 有哪些免费做网站/谷歌官网下载
  • 高端网站建设seo/花生壳免费域名注册
  • 雅安公司做网站/百度上海分公司
  • 网站与微信结合/长沙网站包年优化
  • 智能产品开发与应用/seo外链工具有用吗
  • tp框架做的图片网站/重庆森林电影
  • 网站建设 佛山/一键优化软件
  • 中国上市公司前100名/昆明长尾词seo怎么优化
  • 网站流量分析网站/品牌网络seo方案外包
  • 最好的网站管理系统/山东济南seo整站优化费用
  • 聋哑工作设计做网站/模板建站价格
  • 翠竹营销网站设计/网上营销
  • 做淘客网站多少钱/简述获得友情链接的途径
  • 公司网站建设的申请/免费域名服务器
  • html网站地图怎么做/千度搜索引擎
  • 来宾网站建设/手机网站排名优化
  • 帮妈妈做家务作文网站/提交链接
  • 潮州外贸网站建设/在线种子资源库