Discovering a JDK Race Condition, and Debugging It in 30 Minutes with Fray
a year ago
- #Concurrency
- #Debugging
- #JDK
- 在Fray测试过程中发现JDK存在死锁异常
- 该问题发生于ScheduledThreadPoolExecutor中,当在一个线程调度任务同时在另一个线程关闭执行器时
- Fray的确定性重放和调度可视化功能帮助识别了JDK中的竞态条件
- 该缺陷会导致当执行器处于SHUTDOWN状态时,FutureTask.get方法无限阻塞
- 竞态条件绕过了ThreadPoolExecutor中的检查机制,使任务处于悬置状态
- Fray支持逐步重放错误场景,便于理解和调试问题
- 文档提供了使用Fray和IntelliJ IDEA复现该缺陷的具体步骤
- 虽然已为JDK创建补丁,但公开的缺陷报告仅包含基于Fray的复现步骤