Multiple choice

What will be the output of the program?

public class ThreadDemo 
{ 
    private int count = 1; 
    public synchronized void doSomething() 
    { 
        for (int i = 0; i < 10; i++) 
            System.out.println(count++); 
    } 
    public static void main(String[] args) 
    { 
        ThreadDemo demo = new ThreadDemo(); 
        Thread a1 = new A(demo); 
        Thread a2 = new A(demo); 
        a1.start(); 
        a2.start(); 
    } 
} 
class A extends Thread 
{ 
    ThreadDemo demo; 
    public A(ThreadDemo td) 
    { 
        demo = td; 
    } 
    public void run() 
    { 
        demo.doSomething(); 
    } 
}

  1. It will print the numbers 0 to 19 sequentially.

  2. It will print the numbers 1 to 20 sequentially.

  3. It will print the numbers 1 to 20, but the order cannot be determined.

  4. The code will not compile.

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

You have two different threads that share one reference to a common object. The updating and output takes place inside the synchronized code. One thread will run to complete printing the numbers 1-10. The second thread will then run to complete printing the numbers 11-20.