On 27/06/2025 03:47, David Holmes wrote:
Hi Pavel,

On 27/06/2025 8:23 am, Pavel Rappo wrote:
Here's an interesting behaviour. A thread that has been blocked in
Object.wait is interrupted. But instead of throwing an
InterruptedException, Object.wait returns normally with the thread's
interrupt status set.

Do you mean it returns normally without being notified? That's allowed by spec as it is just a spurious wakeup.

That said, it shouldn't really happen in the current implementation AFAIK, though with recent changes around virtual thread support it is possible some new edge case has crept in. Or a bug.

If the interrupt is racing with a notification then what you see is also allowed as you can't tell which occurred first:

"If the current thread is interrupted by any thread before or while it is waiting, ...

once notified it is no longer waiting.

I can't think of any issues. Yes, there was a lot of code changed but it came with a huge amount of testing and new tests. The tests include racing notify and interrupt, and also racing notify, timeout and interrupt.

So likely what David suggests. One thread does the notify around the same time that another thread interrupts the waiter. In that case, it could easily happen that the waiting thread is awoken (owning he monitor) and continues at around the time that is is interrupted. It's also possible to have many threads attempting to enter the monitor, in which case the waiter is competing.

-Alan

Reply via email to