A new build and a new structured concurrency API

Alan Bateman Alan.Bateman at oracle.com
Tue Nov 16 11:36:38 UTC 2021


On 15/11/2021 22:01, Mike Rettig wrote:
> :
>
> I've tried to use interrupts for cancelling. Interrupt handling code is
> often buried in third party code. To use interrupts I had to find and
> verify that all the interrupts were handled "correctly". It gets even
> trickier when code paths reach points that should no longer be cancelled.
> Rather than using interrupts, it is usually a much better approach to
> create explicit api's that support cancels (e.g. cancel a long running
> network operation by closing the socket).
As Ron said, cancellation is an area that requires further exploration, 
it's not this JEP. Prototypes to date did introduce a set-once cancel 
status and a means to poll it. Also worked through the relationship 
between the two mechanism so that cancellation caused the thread to be 
interrupted, the equivalent of Future::cancel(true), and necessary to 
work with existing code that does cause blocking calls to wakeup. One of 
the main concerns is of course having two similar mechanisms in the API. 
That would have hard to explain to developers, esp. new developers, and 
one of the reasons why we have to be cautious.

You mention cancelling network operations by closing the socket. That is 
the InterruptibleChannel semantics where interrupting a thread blocked 
on a channels causes the channel to be closed and an exception to be 
thrown. This has been extended to the legacy Socket APIs, more details 
on that are in the draft JEP for Virtual Threads. There will of course 
be libraries that do not respond to Thread interrupt but that wouldn't 
change with a new cancel mechanism.

-Alan.


More information about the loom-dev mailing list