Behebung eines JDK-Deadlocks in 30 Minuten mit Fray: Ein Concurrency-Thriller

2025-06-07

Beim Hinzufügen von Integrationstests für Fray stieß der Autor auf einen Deadlock im ScheduledThreadPoolExecutor des JDK, ausgelöst durch scheinbar harmlosen Code. Mit Fray's deterministischer Wiedergabe und Scheduling-Visualisierung wurde die Ursache schnell identifiziert: Im SHUTDOWN-Zustand kann FutureTask.get unbegrenzt blockieren. Dies liegt an der verflochtenen Ausführung der Methoden schedule und shutdown, wodurch Tasks im Limbo verbleiben. Fray bot eine klare Sicht auf das Thread-Interleaving, ermöglichte die Reproduktion und Meldung dieses JDK-Concurrency-Bugs.

Entwicklung