如果在多线程环境下使用HashMap会有什么现象发生呢??G1和CMS?HTTP幂等性?几条常见解决重复提交的方案?

  • put()的时候导致的多线程数据不一致(丢失数据)

  • resize()操作会导致环形链表

  • jdk1.8已解决环链的问题(声明两对指针,维护两个连链表)

  • fail-fast机制,对当前HashMap同时进行删除/修改会抛出ConcurrentModificationException异常

 

G1收集器的设计目标是取代CMS收集器,它同CMS相比,在以下方面表现的更出色:

  • G1是一个有整理内存过程的垃圾收集器,不会产生很多内存碎片

  • CMS采用的是标记清除垃圾回收算法,可能会产生不少的内存碎片

  • G1的Stop The World(STW)更可控,G1在停顿时间上添加了预测机制,用户可以指定期望停顿时间

 

分享几条常见解决重复提交的方案:

  1. 同步锁(单线程,在集群可能会失效)

  2. 分布式锁如redis(实现复杂)

  3. 业务字段加唯一约束(简单)

  4. 令牌表+唯一约束(简单推荐)---->实现幂等接口的一种手段

  5. mysql的insert ignore或者on duplicate key update(简单)

  6. 共享锁+普通索引(简单)

  7. 利用MQ或者Redis扩展(排队)

  8. 其他方案如多版本控制MVCC 乐观锁 悲观锁 状态机等。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值