This week's book giveaway is in the Jobs Discussion forum.
We're giving away four copies of Customer Requirements for Developers and have Marcho Behler on-line!
See this thread for details.
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes annonymous thread Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Customer Requirements for Developers this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "annonymous thread" Watch "annonymous thread" New topic
Author

annonymous thread

srilatha annepu
Greenhorn

Joined: Jun 29, 2006
Posts: 28
public class Test {

static int i = 0;

public static void main(String[] args) {

Thread t = new Thread(new Runnable(){

public void run(){
for(int j = 0; j < 3; j++)
System.out.println(++i);
}
});

t.start();
System.out.println(i);
}
}

how is the output 0
1
2
3
i thought it was 1
2
3
0
can any one help
Peter MacMillan
Ranch Hand

Joined: Jun 23, 2006
Posts: 34
Run this version of the program:



Notice which line gets run first (ie. which line is printing out the 0). You have, essentially, a race condition: The line at //2 will execute before the line at //1 - printing out the B:0.

The output is likely to be:

B:0
A:1
A:2
A:3

However, it could also be, although less likely:

A:1
B:1
A:2
A:3
Peter MacMillan
Ranch Hand

Joined: Jun 23, 2006
Posts: 34
In other words, the start() method only starts the thread: it will not block (execution will continue).

You can block by calling the join() method, which will cause the current thread wait for that thread to finish.
 
Consider Paul's rocket mass heater.
 
subject: annonymous thread
 
It's not a secret anymore!