The output will be either:
1 2 Stack
Stack 1 2
1 Stack 2
1 Stack IllegalThreadStateException
Stack 1 IllegalThreadStateException
1 IllegalThreadStateException
I tried adding for(int x=0; x < 10000000;x++); just before the second start() and the code runs sucessfully repeatedly. I presume the delay in the loop gives the initial thread time to end.
This will just choke the VM executing the main thread, and the thread you have assumed to die probably (assuming optimal thread scheduler behaviour) will not execute at all. You might want to join() which will guarantee one of the three possibilities where IllegalThreadStateException occurs.
Moral of the story, never believe tech. books; they contain too many erroneous claims. Always refer to the relevant specification.