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