Ephemeral threads

Alan Bateman alan.bateman at oracle.com
Sat Jan 10 17:18:13 UTC 2026


On 10/01/2026 16:00, Andrew Haley wrote:
>
> OK, I think I get it. The issue here is that a thread is unreachable 
> but can be resurrected if it's finalized.
>
> So, at some risk of flogging a dead horse, I'm wondering: what if we 
> could figure out a way in which an unreachable thread could be GC'd, 
> but only if it was honest-to-goodness unreachable, i.e. it wasn't on a 
> reference queue and it had no finalizer. We'd be good, right?
>
Hopefully finalization will be disabled by default, and eventually 
removed, but there a lot more to the topic. You can summon other demons 
when the threads act on objects with cleaners (or more generally, 
anything with cleanup actions based on phantom refs). This can lead to 
cleaning actions that attempt to release resources in an inconsistent 
state. Even if we spent a few years on the issues, the usage (to allow 
the alive threads be GC'ed) is very fragile to setup, and the resulting 
behavior would surely be surprising to most developers. If we do 
channels that integrate with structured concurrency then it might be 
that some of the calls for ephemeral threads go away.

-Alan.


More information about the loom-dev mailing list