Java Programming - Threads - Discussion

Discussion Forum : Threads - Finding the output (Q.No. 4)
4.
What will be the output of the program?
class s1 implements Runnable 
{ 
    int x = 0, y = 0; 
    int addX() {x++; return x;} 
    int addY() {y++; return y;} 
    public void run() { 
    for(int i = 0; i < 10; i++) 
        System.out.println(addX() + " " + addY()); 
} 
    public static void main(String args[]) 
    { 
        s1 run1 = new s1(); 
        s1 run2 = new s1(); 
        Thread t1 = new Thread(run1); 
        Thread t2 = new Thread(run2); 
        t1.start(); 
        t2.start(); 
    } 
}
Compile time Error: There is no start() method
Will print in this order: 1 1 2 2 3 3 4 4 5 5...
Will print but not exactly in an order (e.g: 1 1 2 2 1 1 3 3...)
Will print in this order: 1 2 3 4 5 6... 1 2 3 4 5 6...
Answer: Option
Explanation:

Both threads are operating on different sets of instance variables. If you modify the code of the run() method to print the thread name it will help to clarify the output:

public void run()
{
for(int i = 0; i < 10; i++)

System.out.println(
Thread.currentThread().getName() + ": " + addX() + " " + addY()
);

}
Discussion:
13 comments Page 2 of 2.

Srirajyalakshmi said:   1 decade ago
Well here logic is as we are calling 2 threads with 2 start methods and one run method so this run method is called twice so first the 1st thread is executed until the loop ends and then second thread gets executed so finally we get the output as 1 1,2 2, 3 3,......

Srirajyalakshmi said:   1 decade ago
I did not understand the logic can any one explain please.

Saurabh garg said:   1 decade ago
I did not understand the reason. Can anyone explain.


Post your comments here:

Your comments will be displayed after verification.