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

Discussion

Sample37 is run - what will be the output?

public class Sample37
{
    static class Nested
    {
        synchronized void outer() { System.out.print("outer "); inner(); }

        synchronized void inner() { System.out.print("inner"); }
    }

    public static void main(String[] args) throws InterruptedException
    {
        Thread t = new Thread(() -> new Nested().outer());
        t.start();
        t.join();
    }
}

  • A.outer inner
  • B.outer only
  • C.The program deadlocks against itself.
  • D.An IllegalMonitorStateException from inner()

Answer: A

Java monitors are reentrant, so a thread already holding an object's lock may enter another synchronized method on it; the entry count simply increases. Without that, any such call, including one to a superclass method, would deadlock immediately.

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

Post your comment

Please log in or register to post a comment.