Win a copy of Mesos in Action this week in the Cloud/Virtualizaton forum!
    Bookmark Topic Watch Topic
  • New Topic

Marcus Green #3 Q19 (Thread question)

 
Larry Lecomte
Ranch Hand
Posts: 37
  • Mark post as helpful
  • send pies
  • Report post to moderator
The question states:
What will happend when you attempt to compile and run the following code?
public class Tux extends Thread{
static String sName = "vandeleur";
public static void main(String argv[]){
Tux t = new Tux();
t.piggy(sName);
System.out.println(sName);
}
public void piggy(String sName){
sName = sName + " wiggy";
start();
}
public void run(){
for(int i=0;i < 4; i++){
sName = sName + " " + i;
}
}
}
1) Compile time error
2) Compilation and output of "vandeleur wiggy"
3) Compilation and output of "vandeleur wiggy 0 1 2 3"
4) Compilation and probably output of "vandelur" but possible output of "vandeleur 0 1 2 3"
The answer says:
4) Compilation and probably output of "vandelur" but possible output of "vandeleur 0 1 2 3"
Why is the answer POSSIBLE output of "vandeleur 0 1 2 3" ? I was sure that this was ALWAYS in the
output, because the thread is NOT a daemon thread...
 
Ron Newman
Ranch Hand
Posts: 1056
  • Mark post as helpful
  • send pies
  • Report post to moderator
The program has no synchronization, therefore you cannot predict whether run() will run before or after the System.out.println(sName); at the end of main().
It's even possible (though less likely) that you could get one of the following outputs:
vandeleur 0 1 2
vandeleur 0 1
vandeleur 0
So I don't think this question is in error.
[ August 20, 2002: Message edited by: Ron Newman ]
 
Valentin Crettaz
Gold Digger
Sheriff
Posts: 7610
  • Mark post as helpful
  • send pies
  • Report post to moderator
Please do not post the same question in multiple forums.
Continue this discussion at http://www.coderanch.com/t/238952/java-programmer-SCJP/certification/Marcus-Green-Thread
 
    Bookmark Topic Watch Topic
  • New Topic