Machine-translated by Google. Questions are authored in English.
Top

Discussion

Sample45 is run - what will be the output?

public class Sample45
{
    public static void main(String[] args) throws InterruptedException
    {
        final Object gate = new Object();
        Thread waiter = new Thread(() ->
        {
            synchronized (gate)
            {
                try { gate.wait(); }
                catch (InterruptedException e) { System.out.println("interrupted"); }
            }
        });
        waiter.start();
        Thread.sleep(100);
        waiter.interrupt();
        waiter.join();
    }
}

  • A.interrupted
  • B.Nothing
  • C.The program blocks for ever
  • D.An IllegalMonitorStateException from interrupt()

Answer: A

wait is one of the documented blocking calls that respond to an interrupt by throwing InterruptedException, so the waiter leaves the wait set, re-acquires the monitor and runs its catch block. Interruption is therefore the way out of a wait that will never be notified.

No comment is present. Be the first to comment.
Loading…

Post your comment

Please log in or register to post a comment.