Multiple choice

What will be the output of the program?

public class Test 
{ 
    public static void main(String[] args) 
    {
        final StringBuffer a = new StringBuffer(); 
        final StringBuffer b = new StringBuffer(); 

        new Thread() 
        { 
            public void run() 
            {
                System.out.print(a.append(A)); 
                synchronized(b) 
                { 
                    System.out.print(b.append(B)); 
                } 
            } 
        }.start(); 

        new Thread() 
        {
            public void run() 
            {
                System.out.print(b.append(C)); 
                synchronized(a) 
                {
                    System.out.print(a.append(D)); 
                } 
            } 
        }.start(); 
    } 
}

  1. ACCBAD

  2. ABBCAD

  3. CDDACB

  4. Indeterminate output

Reveal answer Fill a bubble to check yourself
D Correct answer
Explanation

It gives different output while executing the same compiled code at different times. C:>javac Test.java C:>java Test ABBCAD C:>java Test ACADCB C:>java Test ACBCBAD C:>java Test ABBCAD C:>java Test ACBCBAD C:>java Test ACBCBAD C:>java Test ABBCAD