【发布时间】:2019-05-04 15:21:16
【问题描述】:
我是线程新手。看了https://www.math.uni-hamburg.de/doc/java/tutorial/essential/threads/definition.html的一篇文章
“线程是程序中的单个顺序控制流。”它对我来说仍然是无形的,如果有人可以再举一个例子并解释更多,那将非常有帮助。
然后我用下面的代码检查了一些例子。
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();
}
}
在 ThreeThreadsTest 的 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 牙买加
完毕!斐济
完毕!波拉波拉岛
完毕!牙买加
有人可以解释为什么会发生这种情况吗?
【问题讨论】:
标签: java multithreading java-threads