这是我的计划。
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)(1000));
} catch (InterruptedException e) {}
}
System.out.println("DONE! " + getName());
}
}
class TwoThreadsTest {
public static void main (String[] args) {
new SimpleThread("Jamaica").start();
new SimpleThread("Fiji").start();
}
}
我的输出为
0 Jamaica
0 Fiji
1 Fiji
1 Jamaica
2 Jamaica
2 Fiji
3 Fiji
3 Jamaica
4 Fiji
4 Jamaica
5 Fiji
5 Jamaica
6 Fiji
6 Jamaica
7 Fiji
7 Jamaica
8 Jamaica
8 Fiji
9 Fiji
9 Jamaica
DONE! Fiji
DONE! Jamaica
我怀疑.. 1)首先调用线程牙买加 要求它睡眠1000毫秒。 然后调用线程斐济 它应该打印并要求进入1000毫秒的睡眠状态。 但我得到如上所示的输出。 为什么不交替和印刷线程jamica和斐济交替
答案 0 :(得分:1)
控制台输出未同步,因此在近距离情况下可能会出现故障。 线程正在获得以正确顺序打印的命令,但打印本身需要不同的时间。
在启动Jamica之后使主线程休眠10,并且在两个线程之间放置一些距离。
代码示例:(基于OP的代码构建):
class TwoThreadsTest extends Thread { // extends Thread addition
public static void main(String[] args) {
SimpleThread a = new SimpleThread("A");
SimpleThread b = new SimpleThread("B");
a.start();
try {
sleep(10); // offsets Console Output de-synchronization
} catch (InterruptedException ex) {
// shouldn't happen
}
b.start();
}
}
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)(1000)); // (int) is redundant
} catch (InterruptedException e) {}
}
System.out.println("DONE! " + getName());
}
}