On Fri, 20 Feb 2026 09:26:52 GMT, Alan Bateman <[email protected]> wrote:

> Thread.join was historically implemented with a loop of Object.wait 
> conditioned on isAlive. We couldn't for this virtual threads because it would 
> pin a virtual thread invoking join to it carrier.  Now that Object.wait 
> preempts, it means the special implementation of join for virtual threads can 
> be removed. Where possible, the notifyAll is elided as it adds to the cost of 
> termination.
> 
> The implNote of the join methods is restored (this is implNote text, not 
> spec, so no CSR required).

Great reduction in complexity, Alan 👍

src/java.base/share/classes/java/lang/Thread.java line 1909:

> 1907:         // ensure there is a notifyAll to wake up waiters when this 
> thread terminates
> 1908:         if (this instanceof VirtualThread vthread) {
> 1909:             vthread.beforeJoin();

If deemed valuable, we might be able to do something more sophisticated as the 
proposed solution will trigger notifyAll even if all joiners bailed out due to 
timeout.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/29839#issuecomment-3941069215
PR Review Comment: https://git.openjdk.org/jdk/pull/29839#discussion_r2837890985

Reply via email to