When you execute the start() method then the JVM thread scheduler will start a new thread. At that point in time, there are two threads running (at least two that are important for the explanation of this question). You've got the main thread and the one that you have just started (I'll call it thread X from now on).
The JVM thread scheduler is not obliged to follow any specific rules regarding thread scheduling.
Case 1: The thread scheduler might continue to run the main thread first and then finish thread X. This results in the output "vandeleur".
Case 2: The thread scheduler might decide to completely run the thread X first and then finish the main thread. In this case the output will be "vandeleur 0 1 2".
Case 3-4-5: The thread scheduler might also decide to run thread X first, but to switch on the main thread once in a while. The result of this case is that "vandeleur" will certainly be printed, but the numbers can be "0", "0 1" or "0 1 2", depending on the time that the thread scheduler decided to discontinue running the thread X.
Hope this is a bit clear, but the bottom line is that the Java Language Specification does not impose rules on the thread scheduling mechanism.