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

wordpress简洁淘宝客免费主题网站seo去哪个网站找好

wordpress简洁淘宝客免费主题,网站seo去哪个网站找好,单页网站网址,wordpress瓶颈一、Put操作(数据覆盖) HashMap底层是基于数组 链表(在 Java 8 以后,当链表长度超过一定阈值时会转换为红黑树)的数据结构。在多线程环境下,当多个线程同时对HashMap进行put操作时,可下面这种…

一、Put操作(数据覆盖)

HashMap底层是基于数组 + 链表(在 Java 8 以后,当链表长度超过一定阈值时会转换为红黑树)的数据结构。在多线程环境下,当多个线程同时对HashMap进行put操作时,可下面这种情况:

假设两个线程 A 和 B 同时执行put操作,它们计算出的插入位置相同(假设为index)。线程 A 先获取到了当前index位置的节点,在它还没来得及将新节点插入链表(或树)时,线程 B 也获取到了这个位置的节点。然后线程 A 完成插入操作,接着线程 B 也执行插入操作,这就可能导致线程 B 插入的节点覆盖了线程 A 插入的节点,从而丢失数据,如下图。

二、扩容机制产生的问题

HashMap在元素个数达到一定阈值(loadFactor * capacity)时会进行扩容。扩容过程是一个比较复杂的操作,它涉及到重新计算每个元素的hash值和新的存储位置,hashmap扩容采用的是头插法

2.1 数据访问不一致

在多线程环境下,假设线程 A 正在进行扩容操作,此时线程 B 也在对HashMap进行put操作。由于扩容操作会重新分配数组空间并迁移元素,线程 B 可能会在这个过程中访问到不一致的数据结构。比如,线程 B 可能会读取到还没有完全迁移好的数据,或者在数据迁移过程中出现数据丢失或重复插入等情况。

假设第一次的原表如下:

这时A抢到时间片进入执行,并扩容:

 

2.2 循环引用问题

在并发环境中,假设有两个线程 A 和 B 同时对 HashMap 进行操作。线程 A 开始进行扩容操作,在遍历旧数组元素的过程中,还没有完成所有元素的重新放置。此时线程 B 也在对这个 HashMap 进行操作,可能会修改元素之间的引用关系。

比如:线程B在遍历过程中完成了整个链表的重新分配,改变了链表的结构。然后线程A继续执行,由于它之前取出了节点1,根据旧的引用关系来插入节点1,但是此时链表结构已经被线程B改变。可能会出现节点1next指针又重新指向了已经处理过的节点,从而形成一个环形链表。

 

当后续在对这个 HashMap 进行操作(如get操作),在遍历链表查找元素时,就会陷入这个环形链表的无限循环中,导致程序无法正常运行,这就是多线程扩容导致的死循环问题。

循环引用会导致这些节点无法被垃圾回收。因为垃圾回收器在进行可达性分析时,会发现从根对象出发可以通过引用链一直访问到这些节点,即使它们在逻辑上可能已经不再被程序正常使用,但由于循环引用的存在,它们依然被判定为可达对象,从而无法被回收,产生内存泄漏。

http://www.mmbaike.com/news/92201.html

相关文章:

  • 安丘做网站的公司北京网站建设开发公司
  • 做网站的复式照片温州seo教程
  • 太仓智能网站开发培训机构招生方案
  • wordpress博东莞网站优化公司哪家好
  • 厦门网站建设是什么女教师网课入侵录屏
  • 个人电脑做网站服务器网站体验营销案例
  • wordpress加站点描述榆林市网站seo
  • 哪个网站做海报比较好手机版百度入口
  • wordpress文章与页面关联优化深圳seo
  • 网站怎么做域名谷歌搜索引擎免费入口 香港
  • app软件开发一般要多少钱seo搜索引擎优化薪资水平
  • 湖州服装网站建设网站整站优化推广方案
  • 网站制作自己接单在百度怎么发广告做宣传
  • 深圳做网站个人电工培训内容
  • 小程序加盟代理前景惠州抖音seo策划
  • 网站如何做微信支付宝支付宝佳木斯seo
  • 外包网站公司如何建网站
  • 长乐建设局网站海外新闻发布
  • 誉重网站建设公司灰色项目推广渠道
  • 福田网站建设哪家公司靠谱企业品牌网站营销
  • 5年程序员真实工资跨境电商seo什么意思
  • 罗湖网站制作小说关键词自动生成器
  • 郑州信息港宁波seo推广服务电话
  • 中国白客网vip钓鱼网站开发网页设计自学要多久
  • 新沂网站设计seo学堂
  • 公司做网站怎么赚钱吗优秀软文范例200字
  • 网站服务器有哪些类型宁波网站推广方案
  • 政府网站专题栏目建设方案网络营销七个步骤
  • 邯郸学校网站建设网络营销的内涵
  • 六年级做的网站的软件下载最近一周的热点新闻