Java 21 Virtual Threads – Dude, Where's My Lock?
netflixtechblog.com
netflixtechblog.com
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.")
In our case, it was because of developer failed to use a finely block to close the socket on our side.