Java Programming - Threads - Discussion
Discussion Forum : Threads - Finding the output (Q.No. 5)
5.
What will be the output of the program?
public class Q126 implements Runnable
{
private int x;
private int y;
public static void main(String [] args)
{
Q126 that = new Q126();
(new Thread(that)).start( ); /* Line 8 */
(new Thread(that)).start( ); /* Line 9 */
}
public synchronized void run( ) /* Line 11 */
{
for (;;) /* Line 13 */
{
x++;
y++;
System.out.println("x = " + x + "y = " + y);
}
}
}
Answer: Option
Explanation:
The synchronized code is the key to answering this question. Because x and y are both incremented inside the synchronized method they are always incremented together. Also keep in mind that the two threads share the same reference to the Q126 object.
Also note that because of the infinite loop at line 13, only one thread ever gets to execute.
Discussion:
14 comments Page 1 of 2.
Varsha said:
5 years ago
Start() method called two times with same object so it should give error.
Narendra said:
6 years ago
I have executed code and two threads got a chance.
Thread-1x = 219751y = 219751
Thread-1x = 219752y = 219752
Thread-1x = 219753y = 219753
Thread-0x = 68569y = 68569
Thread-1x = 219754y = 219754
Thread-1x = 219755y = 219755
Thread-1x = 219756y = 219756
Thread-1x = 219757y = 219757
Thread-1x = 219758y = 219758
Thread-0x = 68570y = 68570
Thread-0x = 68571y = 68571
Can someone answer this?
Thread-1x = 219751y = 219751
Thread-1x = 219752y = 219752
Thread-1x = 219753y = 219753
Thread-0x = 68569y = 68569
Thread-1x = 219754y = 219754
Thread-1x = 219755y = 219755
Thread-1x = 219756y = 219756
Thread-1x = 219757y = 219757
Thread-1x = 219758y = 219758
Thread-0x = 68570y = 68570
Thread-0x = 68571y = 68571
Can someone answer this?
Pavan said:
6 years ago
@Abc.
That is the reference of the object Q126.
That is the reference of the object Q126.
Preeti said:
7 years ago
@Rupesh Pawar.
It is ok to start twice as a new thread is created second time so both will act ss diff thread for the same object.
It is ok to start twice as a new thread is created second time so both will act ss diff thread for the same object.
ABC said:
9 years ago
How come it does not give an error?
There is no that keyword in JAVA!
There is no that keyword in JAVA!
Rupesh Pawar said:
9 years ago
How come its fine to use start() method twice in this program. ?
Dota 2 said:
9 years ago
Java should have initial value for each variable. On this code x and y don't have it.
Suvarna said:
10 years ago
I have executed this code. I found exception constructor thread is undefined.
Savitha said:
10 years ago
Austin, synchronized keyword is not part of the method signature. So it can be added for overriding a method. Also, a synchronized method can be overridden without using a synchronized keyword. So you would not get a compilation error for the above code
As there is a infinite loop, the first thread enters execution , keeps holding the lock, so the next thread never gets its turn.
As there is a infinite loop, the first thread enters execution , keeps holding the lock, so the next thread never gets its turn.
Austin said:
10 years ago
Due to the header of run method, the run() method of interface runnable will not be overridden. Therefore, there will be method name mismatch, i.e., it will be neither overloaded or overridden.
Hence it should give compilation error.
Hence it should give compilation error.
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers