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