What was the solution? If you are creating many virtual threads which might indirectly end up using locks/synchronized, it seems like this is a solution that one could easily encounter
The promise of virtual threads was that you could use existing libraries and mostly have things "just work", so relying on the developer to know about the internal synchronization behavior of all transitive libraries used seems risky. Is the former something that is being worked on for jdk23 (the article only vaguely suggests that they will "hopefully addresses the integration between virtual threads and locking primitives.")