InterruptedException

David Holmes david.holmes at oracle.com
Thu Dec 23 06:28:22 UTC 2021


On 23/12/2021 5:07 am, eric at kolotyluk.net wrote:
> *	or  <https://download.java.net/java/early_access/loom/docs/api/java.base/java/lang/Thread.html#sleep(long,int)> sleep(long, int) methods of this class, then its interrupt status will be cleared and it will receive an  <https://download.java.net/java/early_access/loom/docs/api/java.base/java/lang/InterruptedException.html> InterruptedException.
> 
> Ahhhh, thanks…
> 
> So, because I am pinned by sleep(), the flag gets reset… got it now… How have I been so wrong for so many years?
> 
> I know people like Javadoc to be minimalist, but it would still help to clarify this in
> 
> <https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/InterruptedException.html>

The semantics are determined by the method that throws the IE, not by 
the IE class.

Cheers,
David
-----

>   
> 
> Doesn’t solve my problem of why my thread is ending prematurely, but I will investigate further.
> 
>   
> 
> Cheers, Eric
> 
> 
> 
>   
> 
> From: Alex Otenko <oleksandr.otenko at gmail.com>
> Sent: December 22, 2021 10:59 AM
> To: Eric Kolotyluk <eric at kolotyluk.net>
> Cc: loom-dev <loom-dev at openjdk.java.net>
> Subject: Re: InterruptedException
> 
>   
> 
> Please check java docs for Thread.interrupt()
> 
>   
> 
> Alex
> 
>   
> 
> On Wed, 22 Dec 2021, 18:52 Eric Kolotyluk, <eric at kolotyluk.net <mailto:eric at kolotyluk.net> > wrote:
> 
> I am embarrassed to bring this up here, but I cannot solve this little
> puzzle
> 
> public Duration sleep(Consumer<InterruptedException> exceptionHandler) {
>      final var duration = getDuration();
>      try {
>          Thread.sleep(duration);
>      } catch (InterruptedException interruptedException) {
>          if (exceptionHandler == null)
>              System.out.println("Lag: ignoring interrupt, interrupted =
> " + Thread.currentThread().isInterrupted());
>          else
>              exceptionHandler.accept(interruptedException);
>      }
>      finally {
>          return duration;
>      }
> }
> 
> When I do a thread.interrupt() I see the following output
> 
> Lag: ignoring interrupt, interrupted = false
> 
> where I expected interrupted = true and eventually the thread does stop
> prematurely, where my intention was that the interrupt just be ignored...Is
> the call to println() stopping the thread prematurely? I discovered this
> interesting scenario while writing unit tests for my Lag API.
> 
> For decades my understanding of catching an InterruptedException was that
> it *did not* reset the isInterrupted() flag.
> 
> There is nothing in Class InterruptedException
> <https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/InterruptedException.html>
> that indicates that just catching the exception changes the status of this
> flag. Could someone please clarify this in the JavaDoc.
> 
> Or maybe my misunderstanding goes deeper, but my intuition has really
> failed me here... I was going to test this with Virtual Threads, but I
> wanted to understand Platform Threads better first...
> 
> Sometimes reasoning about concurrency hurts my brain...
> 
> Cheers, Eric
> 


More information about the loom-dev mailing list