On throwing InterruptedException
Alan Bateman
alan.bateman at oracle.com
Mon Nov 17 10:02:25 UTC 2025
On 17/11/2025 00:34, David Holmes wrote:
> On 6/11/2025 7:37 pm, Alan Bateman wrote:
>> Rethrowing the InterruptedException is okay. Throwing a new exception
>> that is not an InterruptedException is okay too but only after
>> restoring the interrupted status, otherwise the thread might block
>> again is some catch block as it unwinds.
>
> I would qualify the "restoring the interrupted status" part as it all
> depends on the overall context. If converting the IE to some other
> exception is part of the cancellation behaviour for this API then it
> may not be necessary to restore the interrupted status because the
> user of the API already knows this aspect of the computation has been
> cancelled. That cancellation request (the interrupt) may not apply to
> anything higher in the call-chain. Which is IIRC exactly how
> FutureTask cancellation operates.
Library code is unlikely to "know" the full context of its usage. If
library code is handling IE by throwing some other exception then I
think the advice has to be restore the interrupted status before
throwing, otherwise some other part of the system, including code
further up in the call chain, may block/hang. Yes, there will be a few
cases that are more advanced or have more global knowledge, but you get
into difficult coordination issues once you try to reduce the scope of
the handling.
-Alan
More information about the core-libs-dev
mailing list