gpt4 book ai didi

java - 线程输出未按预期执行

转载 作者:行者123 更新时间:2023-11-30 07:37:14 25 4
gpt4 key购买 nike

这是我的程序。

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)首先调用牙买加线程要求它 hibernate 1000 毫秒。然后调用线程 Fiji它应该打印并要求 hibernate 1000 毫秒。但我得到的输出如上所示。为什么它不交替执行和打印线程 jamica 和 fiji

最佳答案

控制台输出不同步,因此可能会出现类似情况下的小故障。线程正在获取按正确顺序打印的命令,但打印本身需要不同的时间。

启动 Jamica 后让主线程 hibernate 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());
}
}

关于java - 线程输出未按预期执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35218009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com