Java Programming - Threads - Discussion
Discussion Forum : Threads - Finding the output (Q.No. 7)
7.
What will be the output of the program?
class s implements Runnable
{
int x, y;
public void run()
{
for(int i = 0; i < 1000; i++)
synchronized(this)
{
x = 12;
y = 12;
}
System.out.print(x + " " + y + " ");
}
public static void main(String args[])
{
s run = new s();
Thread t1 = new Thread(run);
Thread t2 = new Thread(run);
t1.start();
t2.start();
}
}
Answer: Option
Explanation:
The program will execute without any problems and print 12 12 12 12.
Discussion:
15 comments Page 1 of 2.
Mohammed Parvez said:
3 years ago
For loop is a trap, If you provide braces for 'for' loop then it prints as much as condition.
Pavan said:
6 years ago
@Lefteris.
You can declare it with lower case, but the convention is to start with a capital letter.
You can declare it with lower case, but the convention is to start with a capital letter.
Ayush said:
7 years ago
The for loop is not having braces so the synch block is in for loop and other code is not in loop.
Lefteris said:
7 years ago
This cause a compilation error as NO class in Java can start with a lowercase letter!
Please help me.
Please help me.
Rakesh said:
8 years ago
Explain the usage of synchronized?
Rochet2 said:
9 years ago
@Aghnar just spoke out my mind.
I looked into it a bit and it seems that the documentation did not say it was thread safe.
It can be that the implementation of it /may/ still be, but should not trust assumptions.
I looked into it a bit and it seems that the documentation did not say it was thread safe.
It can be that the implementation of it /may/ still be, but should not trust assumptions.
Aghnar said:
9 years ago
The synchronized block is a trap. Actually the two threads can
execute the System.out.print(x + " " + y + " ");
So if this code 'System.out.print(x + " " + y + " ")' is not thread safe (which I think is possible, I have to look into the source), the result can be indeterminate.
execute the System.out.print(x + " " + y + " ");
So if this code 'System.out.print(x + " " + y + " ")' is not thread safe (which I think is possible, I have to look into the source), the result can be indeterminate.
Sunil said:
9 years ago
If I remove synchronize block then what happen ?
Vishal said:
1 decade ago
Hello Guys
Here for loop is not having any relation with System.out.print(x + " " + y + " "); after iterating for 1000 times only once this line of code will be executed by thread1,and once the lock is released thread2 will print the System.out.print(x + " " + y + " "); after iterating 1000 times So o/p will between
12 12 12 12
Here for loop is not having any relation with System.out.print(x + " " + y + " "); after iterating for 1000 times only once this line of code will be executed by thread1,and once the lock is released thread2 will print the System.out.print(x + " " + y + " "); after iterating 1000 times So o/p will between
12 12 12 12
Pravin chavan said:
1 decade ago
Hello guys.
There only 2 threads are present. So when the 1st thread are in run method then it print 12 and 12 at that point the 2nd thread is in runnable state (i.e he is weighting for the control of run method) , when the thread1 finished its then thread2 is access the run method. And it prints 12, 12.
So o/p= 12, 12, 12, 12.
There only 2 threads are present. So when the 1st thread are in run method then it print 12 and 12 at that point the 2nd thread is in runnable state (i.e he is weighting for the control of run method) , when the thread1 finished its then thread2 is access the run method. And it prints 12, 12.
So o/p= 12, 12, 12, 12.
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers