Project Loom presentation at BangaloreJUG

Alan Bateman Alan.Bateman at oracle.com
Wed Dec 18 08:46:54 UTC 2019


On 17/12/2019 22:08, Volkan Yazıcı wrote:
> [To the best of my knowledge,] pinning a carrier thread means that the
> fiber will block the thread. In the current prototype, holding a
> monitor is still a blocking operation.
>
Yes, and here's a simple example:

synchronized (lock) {
     Socket s = new Socket("pluto.com", 7777);
}

A virtual thread executing this code will likely park twice when inside 
the synchronized block, once to resolve "pluto.com" to a network 
address, the second when trying to establish the TCP connection to the 
remote host. Virtual threads that park while holding monitors will pin 
the underlying carrier thread, this just means it's not available to 
help other virtual threads that waiting to continue. It's a limitation 
that we want to go away in the medium-to-long term of course.

The system property for the command line that I included in the other 
mail was just a diagnostic option to help track down cases like this. 
The output is a stack trace where the frames holding monitors are 
highlighted with a count of the number of monitors held. A good 
discussion for a meet-ups would be to identify cases like this in your 
code and to see how easy it would be replace with j.u.concurrent locks.

-Alan


More information about the loom-dev mailing list