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
Joined: Jun 06, 2002
Posts: 1056
posted
0
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 ]