[External] : Re: Ephemeral threads
Viktor Klang
viktor.klang at oracle.com
Sun Jan 11 16:30:18 UTC 2026
>Meaning park() doesn’t have to return…. Exception could be thrown and
release never called….
park()
<https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/locks/LockSupport.html#park()>
isn't documented to throw any exception, and even if it were to throw an
exception, it would unwind the stack and end up in some
UncaughtExceptionHandler.
>Resources must be used with try blocks (or some logically similar
construct)
I deliberately omitted the try-finally to be able to say this:
try-finally wouldn't help here if the VT is GCed when parked.
On 2026-01-11 05:17, Dmitry Zaslavsky wrote:
> Your code would be broken in our case, but it’s broken in “plain” java
> case as well.
> Meaning park() doesn’t have to return…. Exception could be thrown and
> release never called….
>
> Resources must be used with try blocks (or some logically similar
> construct)
> That’s what we are trying to “manage” by having a library construct.
> That library construct ensures (optionally) that finally (clean up)
> called up in any case.
>
> The other option I would want to consider is allowing try/finally and
> throwing an interrupt exception.
> I haven’t played with this. Ideally JVM support that lets me know if
> there is a finally block on stack would be nice.
> But I know it’s too much to ask.
>
>
>
>> On Jan 10, 2026, at 7:02 PM, Viktor Klang <viktor.klang at oracle.com>
>> wrote:
>>
>> Hi Dmitry,
>>
>> An example can look like:
>>
>> void method() {
>> long fileDescriptor = acquireFileDescriptor();
>> LockSupport.park();
>> releaseFileDescriptor(fileDescriptor);
>> }
>>
>> If an ephemeral VT executes that method, and there are no other
>> references to that ephemeral VT, then at the point of park(), nothing
>> can unpark it anymore, and it will then never release the file
>> descriptor.
>>
>>
>> >We generally don’t allow try blocks (providing other constructs), we
>> also very strongly discourage (just a drop short of disallowing) ANY
>> threading primitives.
>>
>>
>> I don't see how that can work in practice, because it requires all
>> users of your constructs to be familiar about exactly how all
>> third-party logic (including JDK classes) are implemented under the
>> hood. Perhaps I'm misunderstanding?
>>
>> On 2026-01-09 17:27, Dmitry Zaslavsky wrote:
>>> Not sure what you mean by native resources?
>>> Do you mean what people would use like try resources?
>>> We generally don’t allow try blocks (providing other constructs), we also very strongly discourage (just a drop short of disallowing) ANY threading primitives.
>>>
>>> Which makes me think that there is a better way to express my point from before.
>>> I think there is actually a common pattern here.
>>>
>>> We use VT inside of the lib. We don’t want users to actually use any threads all.
>>> I think it’s a goal of Alex as well.
>>> We use VT as a way to avoid using threads (if that makes sense).
>>>
>>> I think ScopedTasks is going in the same direction. Ideally user just doesn’t know there are threads.
>>> We use Scala (appealing to Victor ;)) vals and immutable collections is the norm.
>>>
>>> We don’t want users to think about Threads period.
>>> So the thought of "GC roots on a VT … we don’t want that though to ever occur or we failed ;)
>>>
>>>
>>>
>>>
>>>
>>>> On Jan 9, 2026, at 10:26 AM, Viktor Klang<viktor.klang at oracle.com> wrote:
>>>>
>>>>
>>>> On 2026-01-09 15:39, Dmitry Zaslavsky wrote:
>>>>> someCollection.apar.map { …. }
>>>>> Can spin N tasks (Each can get it's VT) If some iteration of the loop throws, we don’t need to rest of the code to run, it’s costly.
>>>>> If the task are not actively mounted but previously started and are waiting… (in our case it’s LockSupport.park) we just want to drop that entire queue and everything around it….
>>>>>
>>>>>
>>>> How do you handle acquired native resources that are yet to be released?
>>>>
>>>>
>>>> --
>>>> Cheers,
>>>> √
>>>>
>>>>
>>>> Viktor Klang
>>>> Software Architect, Java Platform Group
>>>> Oracle
>>>>
>> --
>> Cheers,
>> √
>>
>>
>> Viktor Klang
>> Software Architect, Java Platform Group
>> Oracle
>
--
Cheers,
√
Viktor Klang
Software Architect, Java Platform Group
Oracle
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/loom-dev/attachments/20260111/191ff255/attachment.htm>
More information about the loom-dev
mailing list