这是我的程序。
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和斐济的线程?
发布于 2016-02-05 14:57:55
控制台输出是不同步的,因此它可能会出现类似于近距离情况下的故障。线程正在获取命令以按正确的顺序打印,但是打印本身需要不同的时间。
在启动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());
}
}https://stackoverflow.com/questions/35218009
复制相似问题