美文网首页
记一次List脏写

记一次List脏写

作者: a4c08081f9ed | 来源:发表于2022-07-25 16:04 被阅读0次

往ArrayList里add了2条数据,翻开xlog日志看也确实是add了2次,但最终只显示了一个,为啥?

咱先看ArrayList的add方法:

咱接下来只看size++,size++编译后 对应的是5条字节码指令:

如果线程1执行了2条指令 线程2开始读取size的值,就会出现ArrayList脏写的问题。问题就是因为线程1还没有执行size的putfiled指令 就连iadd指令也还没有执行,那此时线程2拿到的size仍然没有+1,也就是线程2写入的数据会覆盖线程1写入的数据,size却变成了2。

如果到了扩容的时候,两个线程同时执行扩容的操作 是会crash的,也就是ensure开头的那个方法。

相关文章

  • 记一次List脏写

    往ArrayList里add了2条数据,翻开xlog日志看也确实是add了2次,但最终只显示了一个,为啥? 咱先看...

  • 脏脏面包洗澡记

    可可创作的小故事,在叶老师讲课的同时勇敢地画出来了 前天给她买了一个脏脏包,回家的时候她在玩冰,然后就自己编了一个...

  • rancher kubernetes etcd crash

    记一次修复 Kubernetes etcd 挂掉的情况。 �由于etcd 中可能存在一些脏数据,导致 教训: et...

  • 入坑前端01:如何使用ls cat mv touch 命令

    1.记单词 list:罗列 move:移动 touch:触摸 2.单词缩写 list ls : 罗列 ...

  • 仨月记

    日程本上的“ to-do-list” 从二月底的写月记到了三月底的写双月记,到这会儿都已经四月中下旬了。终于在周末...

  • [丞昊abo]唯你独甜♡

    第一次写文超级紧脏 也不知道写的怎么样 xxj文笔见谅哈 私设+++++ --------------------...

  • 脏脏茶诞生记

    视觉日记第109天 ——脏脏茶诞生记 ??? #日复盘第 107天# 【成就感】7 【幸福感】7 【重要事件】 一...

  • 利用泛型判断List是否有值

    利用泛型判断List是否有值 之前写判断list总是要写list!=null && list.size()>0;项...

  • Bullet Journal

    Todo List+Gratitude 满满的to do list~旁边贴上了打印的chronodex(一个时间记...

  • MySQL-Innodb-刷脏的具体执行

    参数 innodb_lru_scan_depth调用栈批量刷脏会从lru和flush list中flush。inn...

网友评论

      本文标题:记一次List脏写

      本文链接:https://www.haomeiwen.com/subject/tjjvirtx.html