Hi, Vinod
My question is does this thread executes always in such unpredictable order ?
Yes, it does. You start three threads but your JVM decides only at run-time which thread gets CPU time. However you can use setPriority() method of Thread class, and in this case, Thread with higher priority gets higher chance to be run, but again it doesn't guarantee anything. Other methods that could improve "stability" of output are sleep() and yield(). But againg, even if you call, yield(), it's up to thread scheduler to decide which thread to run.
You should probably read about synchronization, but that is somewhat complex topic, and I'm myself having hard time with it
Good luck!