如何解读和解释这个java线程程序的执行结果

How to interpret and explain the execution result of this java threading program

我是线程的新手。我读了一篇来自 https://www.math.uni-hamburg.de/doc/java/tutorial/essential/threads/definition.html

的文章

"A thread is a single sequential flow of control within a program."对我来说还是摸不着头脑,如果有人能再举个例子再解释一下会很有帮助

然后我用下面的代码检查了一些例子。

class SimpleThread extends Thread {
     public SimpleThread(String str) {
         super(str);
     }
     public void run() {
         for (int i = 0; i < 10; i++) {
             System.out.println(i + " " + getName());
             try {

                 # sleep((int)(Math.random() * 1000));
                 /* I have changed Math.random() to 0.5 so that all will sleep with same amount of time */
                 sleep((int)(0.5 * 1000));
             } catch (InterruptedException e) {}
         }
         System.out.println("DONE! " + getName());
     }
 }

 class ThreeThreadsTest {
     public static void main (String[] args) {
         new SimpleThread("Jamaica").start();
         new SimpleThread("Fiji").start();
         new SimpleThread("Bora Bora").start();
     }
 }

在ThreeThreadsT​​est的main函数中,三个线程一个一个创建,结果应该是这样的:

0 个牙买加
0 斐济
0 波拉波拉岛
1 牙买加
1 斐济
1 波拉波拉岛
2 牙买加
2 斐济
2 波拉波拉岛 ...

但结果是这样的:
0 牙买加
0 波拉波拉岛
0 斐济
1 牙买加
1 波拉波拉岛
1 斐济
2 牙买加
2 斐济
2 波拉波拉岛
3 牙买加
3 斐济
3 波拉波拉岛
4 波拉波拉岛
4 牙买加
4 斐济
5 波拉波拉岛
5 牙买加
5 斐济
6 波拉波拉岛
6 牙买加
6 斐济
7 波拉波拉岛
7 斐济
7 牙买加
8 波拉波拉岛
8 牙买加
8 斐济
9 波拉波拉岛
9 斐济
9 牙买加
完毕!斐济
完毕!波拉波拉岛
完毕!牙买加

谁能解释为什么会这样?

Thread.start() 将线程放入准备执行的线程队列中。然后 OS 选择任何就绪线程并执行它。无法保证下一个将选择哪个线程,因此执行顺序相当随机。

里面的线程有一个"sequential flow",但对于多个线程则不然。

"the same amount of time" 并不像看起来那么固定。 在 CPU 内,一毫秒的时间就像是永恒。 CPU 将等待您定义的毫秒数,但在 "wait" 之后取决于 cpu,它将首先恢复哪个线程。