Bug:StampedLock的中断问题导致CPU爆满
2023-09-14 08:56:48 时间
StampedLock作为JAVA8中出现的新型锁,很可能在大多数场景都可以替代ReentrantReadWriteLock。它对于读/写都提供了四个接口(换成write为写锁):
readLock()tryReadLock()
tryReadLock(long time, TimeUnit unit)
readLockInterruptibly()
这几个方法对应的语义为:
获取读锁(阻塞,不响应中断) 获取读锁(立即) 限时获取读锁(响应中断) 获取读锁(阻塞,响应中断)然而在readLock方法(即不响应中断)中存在问题(write的版本也是),观察CPU使用率,执行以下代码:
先开启一个线程获取写锁并保持6秒,再开启三个带着中断状态的线程去获取读锁(readLock方法),结果是3个核心被占据了近6秒。 原因在于没有使用保存/复原中断状态的机制,通过hack源码,插入保存中断和返回前恢复中断的相关代码即可修复:
ali清英 方腾飞,花名清英,英文名kiral,并发编程网创始人,支付宝技术专家,《Java并发编程的艺术》作者。
相关文章
- 关于React的Key导致的bug总结
- 软件测试知识小课堂之Bug激活率
- mobx 6 关于computed 不更新的bug
- 爆火的ChatGPT太强了!写代码、改bug,网友:可取代Stack Overflow了
- 24 年了,终于有人发现 curl 的这个 Bug 了
- 研究了代码质量后,开发速度提高了 2 倍,bug 减少了 15 倍
- redis使用不当导致应用卡死bug的过程解析
- 占用Linux 线程CPU占用分析与优化(linux线程cpu)
- 使用情况探究深层次:Linux 查看 CPU 使用情况(linux系统查看cpu)
- 占用调整Linux进程,缓解CPU高占用(linux进程cpu高)
- 如何在Ubuntu 18.04 LTS上安装和配置Mantis Bug Tracker
- 联通手机营业厅出现重大缴费Bug:721元不翼而飞
- Linux下的CPU压力测试(cpu压力测试linux)
- 占用过高分析并解决Oracle 进程CPU占用过高问题(oracle进程cpu)
- 老编译器以及古老的 bug!
- 揭秘MySQL CPU占用率过高的原因及解决方案(mysql占cpu)
- 信息:Linux命令查询CPU信息:快速了解你的系统(linux命令查询cpu)
- 破解Oracle数据库修复Bug问题(oracle修改bug)
- Oracle乐观锁导致的Bug及解决方案(oracle乐观锁bug)
- Oracle CPU优化之路提升性能的不二法则(oracle cpu优化)
- Redis使用会消耗大量CPU(redis费cpu吗)
- asp.NET开发中正则表达式中BUG分析
- iframe的onload在Chrome/Opera中执行两次Bug的解决方法